我有一个类似于这个的问题,但不同.
在这里,我试图为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
});
});
Run Code Online (Sandbox Code Playgroud)
$location.pathAngular没有承认这一点.
另一个问题是我应该调用$apply()范围,但是我可以使用的唯一范围是$rootScope调用$apply()它似乎不起作用.
对答案的评论表明可以使用范围
$scope = angular.element(document).scope()
Run Code Online (Sandbox Code Playgroud)
但这给了我$rootScope,这是行不通的.
如何通过角度来调整变化$location.path()?是否有更好的方式以message可以更改路径的方式注册回调?
Tho*_*mas 117
您应该在$apply()方法中将表达式作为函数运行
app.run(function ($location, $window, $rootScope) {
$window.addEventListener('message', function(e) {
$rootScope.$apply(function() {
$location.path("/abc");
console.log($location.path());
});
});
});
Run Code Online (Sandbox Code Playgroud)
如果要提高可测试性,请使用$console而不是console注入并注入该对象.
Dhr*_*eja 10
接受的解决方案不是适当的方法.理想情况下,您不应该干扰摘要周期($ apply()会这样做).
根据我的最好方法是从MainController调用$ location.path().使用$emit - $on它从那里发送到MainController,并有一个函数调用$ location.path.它将完美地重定向您,而不必干扰消化周期.我希望这可以帮助别人.
| 归档时间: |
|
| 查看次数: |
88512 次 |
| 最近记录: |