Angularjs 角度$location.path不工作
我有一个类似的问题,但不同 这里我尝试为处理程序添加一个事件侦听器 Angular无法识别Angularjs 角度$location.path不工作,angularjs,Angularjs,我有一个类似的问题,但不同 这里我尝试为处理程序添加一个事件侦听器 Angular无法识别$location.path 另一个问题是,我应该在作用域上调用$apply(),但我唯一可用的作用域是$rootScope,并且调用$apply()似乎不起作用 对答案的评论表明,可以使用 $scope = angular.element(document).scope() 但是这给了我$rootScope,它不起作用 我如何才能在$location.path()中调整更改?有没有更好的方法来注册消息回
$location.path
另一个问题是,我应该在作用域上调用$apply()
,但我唯一可用的作用域是$rootScope
,并且调用$apply()
似乎不起作用
对答案的评论表明,可以使用
$scope = angular.element(document).scope()
但是这给了我$rootScope
,它不起作用
我如何才能在
$location.path()
中调整更改?有没有更好的方法来注册消息
回调,以便我可以更改路径?您应该在$apply()
方法中以函数形式运行表达式,如
app.run(function ($location, $window, $rootScope) {
$window.addEventListener('message', function(e) {
$rootScope.$apply(function() {
$location.path("/abc");
console.log($location.path());
});
});
});
看
如果要提高可测试性,请使用
$console
而不是console
,并同时注入该对象。可接受的解决方案不适合这样做。理想情况下,您不需要干扰摘要周期($apply()就是这样做的)
我认为最好的方法是从主控制器调用$location.path()。使用$emit-$on
将其发送到主控制器,并从此处调用函数$location.path。
它将完美地重定向您,而不必干扰消化周期。
我希望这对某人有所帮助。没有$timeout的解决方案 只需在使用$state.go之前防止重定向到默认状态
event.preventDefault();
$state.go('root');
我也有同样的问题,我的错误是我在我的项目上运行的ng click指令很糟糕 坏例子:
<a **href="#"** ng-click="myFunctionChangeLocationPath()">...
。。。
示例井:
<a ng-click="myFunctionChangeLocationPath()">...
。。。
这样你就可以纠正这个问题了 你看到事件正确触发了吗?如果你是说事件监听器触发了,那么是的,我有一个调试器断点。太棒了,非常感谢。(我只是为了说明这个问题而使用日志)。这对我不起作用,因为我已经得到了一个摘要。我不明白为什么一开始就需要$apply,angular应该知道路径更改,因为您正在使用$location服务来启动它。更新:在我调用$location后,在线路上调用$location.replace()。path()为我修复了它。不需要$apply()。虽然OP使用的是
$rootScope
,但我认为$scope
应该足够了。我在主控制器中,试图使用location,但它不起作用。我尝试了公认的解决方案,有时有效,有时无效,当这种情况发生时,我会抱怨消化周期。我可以将事件发送到某个地方并捕获它吗?记住我在主控制器里。如果可能的话,如何捕捉它?@MateusPires使用$timeout。当一个事件发生时,它不会触发摘要,但当它全部完成时。这根本不能解决问题。
<a ng-click="myFunctionChangeLocationPath()">...