首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Angular $location.path不工作

Angular $location.path不工作
EN

Stack Overflow用户
提问于 2013-10-14 19:47:59
回答 4查看 90.4K关注 0票数 62

我有一个类似于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回调,这样我就可以更改路径了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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,并注入该对象。

票数 118
EN

Stack Overflow用户

发布于 2016-06-28 15:58:49

被接受的解决方案不是做这件事的适当方式。理想情况下,您不需要干扰摘要周期( $apply()就是这么做的)。

根据我的说法,最好的方法是从MainController调用$location.path()。使用$emit - $on将其发送到MainController,并从那里调用$location.path函数。它将完美地重定向您,而不会干扰摘要周期。我希望这对某些人有帮助。

票数 10
EN

Stack Overflow用户

发布于 2017-05-07 04:52:01

我也有同样的问题,我的错误是我在我的项目上运行了错误的ng-click指令。

糟糕的例子:

<a **href="#"** ng-click="myFunctionChangeLocationPath()">...

很好的例子:

<a ng-click="myFunctionChangeLocationPath()">...

这样你就可以纠正这个问题了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19359553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档