angularjs - angular a href




AngularJS $位置不改变路径 (6)

前几天我有类似的问题。 在我的情况下,问题是我改变了事情与第三方库(精确的jQuery),在这种情况下,即使调用函数和设置变量作品Angular并不总是认识到有变化,因此它永远不会消化。

$ apply()用于从角度框架外部以角度执行表达式。 (例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。

尝试在改变位置后立即使用$scope.$apply() ,并调用replace()让Angular知道事情已经改变。

在提交表单后更改页面的URL时遇到问题。

这里是我的应用程序的流程:

  1. 路由被设置,URL被识别到某个表单页面。
  2. 页面加载,控制器设置变量,指令被触发。
  3. 一个特殊的表单指令被激发,它使用AJAX执行特殊的表单提交。
  4. 执行完AJAX之后(Angular没有照顾AJAX),然后回调被触发,指令调用设置位置的$scope.onAfterSubmit函数。

问题是,设置位置后没有任何反应。 我试着将位置参数设置为/以及...不。 我也尝试不提交表单。 什么都没有

我已经测试过,看看代码是否到达onAfterSubmit函数(它的作用)。

我唯一的想法是,函数的作用域在某种程度上被改变了(因为它从一个指令中调用),但是如果作用域改变了, onAfterSubmit怎么能调用onAfterSubmit

这是我的代码

var Ctrl = function($scope, $location, $http) {
  $http.get('/resources/' + $params.id + '/edit.json').success(function(data) {
    $scope.resource = data;
  });

  $scope.onAfterSubmit = function() {
    $location.path('/').replace();
  };
}
Ctrl.$inject = ['$scope','$location','$http'];

有人可以帮我吗?


在我的情况下,问题是我的模板配置中缺少可选参数指示符('?')。

例如:

.when('/abc/:id?', {
    templateUrl: 'views/abc.html',
    controller: 'abcControl'
})


$location.path('/abc');

没有询问特性,路线显然不会改变抑制路线参数。


我不得不这样嵌入我的$location.path()语句,因为我的摘要仍在运行:

       function routeMe(data) {                
            var waitForRender = function () {
                if ($http.pendingRequests.length > 0) {
                    $timeout(waitForRender);
                } else {
                    $location.path(data);
                }
            };
            $timeout(waitForRender);
        }

我遇到了同样的问题,但是我在$摘要中调用了$ location。 调用$ apply()只是在处理错误中给出了一个$摘要。

这个技巧奏效了(并确保将$location注入到控制器中):

$timeout(function(){ 
   $location...
},1);

虽然不知道为什么这是必要的...


这对我来说(在CoffeeScript中)

 $location.path '/url/path'
 $scope.$apply() if (!$scope.$$phase)

setTimeout(function() { $location.path("/abc"); },0);

它应该解决你的问题。





angularjs