Javascript AngularJS:scope.apply Inner ajax调用在URL中的参数更改后不会触发
我试图从服务器生成的JSON更新我的控制器,路由为从数据库获取的我需要的项目提供Id,并将其保存在ProyectoId变量中。 当我第一次加载页面时,一切正常,但当我单击一个链接将我带到同一页面但不同Id时,第三个标志:Javascript AngularJS:scope.apply Inner ajax调用在URL中的参数更改后不会触发,javascript,angularjs,asp.net-mvc,Javascript,Angularjs,Asp.net Mvc,我试图从服务器生成的JSON更新我的控制器,路由为从数据库获取的我需要的项目提供Id,并将其保存在ProyectoId变量中。 当我第一次加载页面时,一切正常,但当我单击一个链接将我带到同一页面但不同Id时,第三个标志: alert("Third"); 之后的所有代码都不会触发。正确检索AJAX结果,因此这不是问题所在。 我把头撞在墙上已经有一段时间了,我找不到任何答案。我能找到的最接近的问题是: 但我无法让它发挥作用,我不认为这是我遇到的同一个问题 这是我的app.module.js文件(
alert("Third");
之后的所有代码都不会触发。正确检索AJAX结果,因此这不是问题所在。
我把头撞在墙上已经有一段时间了,我找不到任何答案。我能找到的最接近的问题是:
但我无法让它发挥作用,我不认为这是我遇到的同一个问题
这是我的app.module.js文件(经过修剪以避免出现不必要的部分):
这是我的HTML,您可能会注意到一些razor标记,因为我使用ASP.NET MVC作为服务器代码(您可能会注意到,由于我修剪了控制器代码,所以缺少一些变量):
Proyecto索引
Nombre Proyecto:{{ctrlProyectoIndex.Nombre}
@使用(Html.BeginForm(“AgregarPedido”,“Proyecto”,FormMethod.Post,new{id=“frm crear pedido”}))
{
@Html.AntiForgeryToken()
新项目段:{{ctrlProyectoIndex.Nombre}
}
我是angularJS的新手,因此任何其他指针都会受到重视:)您应该对模型进行更改,然后调用$scope。$apply()。另外,明确地将$scope注入控制器/指令 尝试:
success: function (result) {
controller.Nombre = result.Nombre;
controller.Pedidos = result.Pedidos;
$scope.$apply();
},
这并没有解决问题,它仍然像以前一样工作
(function () {
var app = angular.module('proyecto-module', []);
app.directive('proyectoIndex', ['$routeParams', '$route', function ($routeParams, $route) {
return {
restrict: 'E',
templateUrl: '/Proyecto/Index/',
controllerAs: 'ctrlProyectoIndex',
controller: function () {
var controller = this;
this.ProyectoId = $routeParams.proyectoId;
this.Nombre = "";
this.Pedidos = [];
var controllerScope = angular.element("proyecto-index").scope();
var actualizarDatos = function () {
var token = $('input[name="__RequestVerificationToken"]').val();
var data = { __RequestVerificationToken: token, id: controller.ProyectoId };
$.ajax({
url: '/Proyecto/ProyectoJSON',
type: 'POST',
data: data,
success: function (result) {
alert("Second!");
controllerScope.$apply(function () {
alert("Third!"); //From this point forward none of the code is triggering.
controller.Nombre = result.Nombre;
controller.Pedidos = result.Pedidos;
});
},
error: function (xhr, status, error) {
alert("ERROR: " + xhr.responseText);
}
});
};
alert("First!");
actualizarDatos();
},
}
}]);
})();
<h1>Proyecto Index</h1>
<h2>Nombre Proyecto: {{ctrlProyectoIndex.Nombre}}</h2>
<a href="" ng-click="ctrlProyectoIndex.modalCrearPedido()">Crear Pedido</a>
<div>
<a href="/WebApp#!/Proyecto/Pedido/{{item.PedidoId}}" ng-show="ctrlProyectoIndex.Pedidos.length > 0" ng-repeat="item in ctrlProyectoIndex.Pedidos">{{item.Titulo}}</a>
</div>
<div id="modal-crear-pedido" ng-show="ctrlProyectoIndex.modal">
@using (Html.BeginForm("AgregarPedido", "Proyecto", FormMethod.Post, new { id = "frm-crear-pedido" }))
{
@Html.AntiForgeryToken()
<input type="text" name="ProyectoId" ng-model="ctrlProyectoIndex.ProyectoId" />
<span>Nuevo proyecto para: {{ctrlProyectoIndex.Nombre}}</span>
<br />
<input type="text" name="Titulo" placeholder="Titulo del pedido" />
<br />
<textarea name="Texto" placeholder="Descripción del pedido" ></textarea>
<input type="submit" value="Aceptar" />
}
</div>
<div id="fondo" ng-show="ctrlProyectoIndex.modal" ng-click="ctrlProyectoIndex.cerrarModal()"></div>
success: function (result) {
controller.Nombre = result.Nombre;
controller.Pedidos = result.Pedidos;
$scope.$apply();
},