【问题标题】:$location.path not working inside an Angular directive$location.path 在 Angular 指令中不起作用
【发布时间】:2013-06-18 19:41:20
【问题描述】:

我正在尝试从 AngularJS 指令中更新 $location.path。它没有按我的预期工作,即更新浏览器窗口中显示的 URL 并在我的页面上显示不同的内容。正如控制台中所见,我的函数肯定会被正确的值调用。我认为$location.path 可能会产生一些效果,因为当我单击链接时,会调用一些额外的函数,这些函数将在新页面上调用,只有新页面永远不会显示。当我在控制器中使用 $location.path 时,它按预期工作,但在我的指令中却没有。

这是我的指令的 HTML:

<div detail-link="/comments?post={{post.postId}}" ng-click="clickDetailLink()"></div>

这是指令的定义(在 CoffeeScript 中):

directives.directive 'detailLink', ['$location', ($location) ->
    return (scope, element, attrs) ->
        scope.clickDetailLink = ->
            console.log "loading " + scope.detailLinkHref
            $location.path scope.detailLinkHref

        attrs.$observe 'detailLink', (value) ->
            console.log "set detail link to " + value
            scope.detailLinkHref = value
]

我知道这里发生了什么...我的$routeProvider 设置为处理/comments,但在这里我试图将查询字符串附加到路由。如果我使用常规的&lt;a href="#/comments?post={{post.postId}}"&gt;,那可以正常工作,但是通过$location.path 以某种方式设置相同的路线是行不通的。这与此代码是在控制器还是指令中无关。

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    试试scope.$apply? (注意 $)

    【讨论】:

    • 嗯,是的。这解决了这个问题,但它仍然没有解决真正的问题。现在我有$apply already in progress。将其包装在 $timeout 中可修复“已在进行中”位,但仍不会更新路径。我会编辑我的问题.. 谢谢!
    • 您可能还想查看 $log。
    • 你应该可以在你的控制器中完成这一切。
    • 我在控制器中遇到了完全相同的问题 - 请参阅上面的编辑。
    • 据我所知,路由确实发生了变化,但由于它是相同的哈希,因此不会重新路由。看起来你想使用 $location.search(); docs.angularjs.org/api/ng.$location#search
    【解决方案2】:

    问题是 Angular 的 $routeProvider 与查询字符串的路径不匹配,就像我提供的那样,所以它再次匹配我的原始页面并重新加载它。 Similar solution here. 不过,这是一种奇怪的症状。

    【讨论】:

      【解决方案3】:

      scope.$apply 为我工作。先试试吧。

      【讨论】:

        【解决方案4】:

        $location.path 不支持任何param

        请改用$location.url

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-14
          • 1970-01-01
          • 1970-01-01
          • 2016-05-01
          • 2018-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多