Javascript AngularJS:scope.apply Inner ajax调用在URL中的参数更改后不会触发

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文件(

我试图从服务器生成的JSON更新我的控制器,路由为从数据库获取的我需要的项目提供Id,并将其保存在ProyectoId变量中。 当我第一次加载页面时,一切正常,但当我单击一个链接将我带到同一页面但不同Id时,第三个标志:

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();
},