我有一个类似于this one的问题,但不同。
在这里,我尝试为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
});
});
Angular无法识别$location.path
。
另一个问题是我应该在作用域上调用$apply()
,但我唯一可用的作用域是$rootScope
,并且在这个作用域上调用$apply()
似乎不起作用。
对答案的评论表明,可以使用以下命令获取范围
$scope = angular.element(document).scope()
但是这给了我一个$rootScope
,它不能工作。
如何获取angular来注册$location.path()
中的更改?有没有更好的方法来注册message
回调,这样我就可以更改路径了?
发布于 2013-10-14 20:04:41
您应该在$apply()
方法中将表达式作为函数运行,如下所示
app.run(function ($location, $window, $rootScope) {
$window.addEventListener('message', function(e) {
$rootScope.$apply(function() {
$location.path("/abc");
console.log($location.path());
});
});
});
参见documentation - ng.$rootScope.Scope。
如果您想提高可测试性,请使用$console
而不是console
,并注入该对象。
发布于 2016-06-28 15:58:49
被接受的解决方案不是做这件事的适当方式。理想情况下,您不需要干扰摘要周期( $apply()就是这么做的)。
根据我的说法,最好的方法是从MainController调用$location.path()。使用$emit - $on
将其发送到MainController,并从那里调用$location.path函数。它将完美地重定向您,而不会干扰摘要周期。我希望这对某些人有帮助。
发布于 2017-05-07 04:52:01
我也有同样的问题,我的错误是我在我的项目上运行了错误的ng-click指令。
糟糕的例子:
<a **href="#"** ng-click="myFunctionChangeLocationPath()">...
很好的例子:
<a ng-click="myFunctionChangeLocationPath()">...
这样你就可以纠正这个问题了!
https://stackoverflow.com/questions/19359553
复制相似问题