我有一个类似于
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,它不工作。
如何获得角度来重新定位$ location.path()中的更改?有没有更好的方式注册一个消息回调的方式,我可以改变路径?
你应该在$ apply()方法中运行表达式as function
原文链接:https://www.f2er.com/angularjs/146555.htmlapp.run(function ($location,function(e) { $rootScope.$apply(function() { $location.path("/abc"); console.log($location.path()); }); }); });
见documentation – ng.$rootScope.Scope。
如果你想提高可测试性,使用$ console而不是控制台,并注入那个对象。