angular$ location.path不工作

我有一个类似这个问题,但不同。

在这里,我正在尝试为window.postMessage处理程序添加一个事件侦听器。

 app.run(function ($location, $window, $rootScope) { $window.addEventListener('message', function(e) { $location.path("/abc"); console.log($location.path()); // this prints "/abc" as expected $rootScope.$apply(); // this has no effect $scope = angular.element(document).scope(); // this is the same as $rootScope $scope.$apply(); // so this also has no effect }); }); 

$location.path不被Angular识别。

另一个问题说,我应该在范围上调用$apply() ,但唯一可用的范围是$rootScope并且调用$apply()似乎不起作用。

答案的评论表明,范围可以得到

 $scope = angular.element(document).scope() 

但是这给了我$rootScope ,这是行不通的。

如何得到angular度来注册$location.path()的更改? 有没有更好的方式来注册一个messagecallback的方式,我可以改变path?

你应该像$apply()方法那样在函数中运行expression式

 app.run(function ($location, $window, $rootScope) { $window.addEventListener('message', function(e) { $rootScope.$apply(function() { $location.path("/abc"); console.log($location.path()); }); }); }); 

请参阅文档 – ng。$ rootScope.Scope 。

如果您想提高可testing性,请使用$console而不是$console来注入该对象。

接受的解决scheme不是适当的方法来做到这一点。 理想情况下,你不应该干扰摘要循环($ apply())。

根据我的最好的方法是从MainController调用$ location.path()。 使用$emit - $on将其发送到MainController并从那里调用$ location.path函数。 它将完全redirect您,而不会干扰摘要循环。 我希望这可以帮助别人。

没有$超时的解决scheme。

在使用$ state.go之前,防止redirect到默认状态

 event.preventDefault(); $state.go('root'); 

我有同样的问题,我的错误是,我在我的项目上严重运行ng-click指令。

不好的例子:

 <a **href="#"** ng-click="myFunctionChangeLocationPath()">... 

例子井:

 <a ng-click="myFunctionChangeLocationPath()">... 

所以你可以纠正这个问题!