Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度$location.path不工作_Angularjs - Fatal编程技术网

Angularjs 角度$location.path不工作

Angularjs 角度$location.path不工作,angularjs,Angularjs,我有一个类似的问题,但不同 这里我尝试为处理程序添加一个事件侦听器 Angular无法识别$location.path 另一个问题是,我应该在作用域上调用$apply(),但我唯一可用的作用域是$rootScope,并且调用$apply()似乎不起作用 对答案的评论表明,可以使用 $scope = angular.element(document).scope() 但是这给了我$rootScope,它不起作用 我如何才能在$location.path()中调整更改?有没有更好的方法来注册消息回

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

这里我尝试为处理程序添加一个事件侦听器

Angular无法识别
$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()">...