7

我正在尝试$location.path从 AngularJS 指令中进行更新。它没有按我的预期工作,即更新浏览器窗口中显示的 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但在这里我试图将查询字符串附加到路由。如果我使用常规的<a href="#/comments?post={{post.postId}}">,那可以正常工作,但是以某种方式设置相同的路由 via$location.path是行不通的。这与此代码是否在控制器或指令中无关。

4

4 回答 4

5

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

于 2013-06-18T19:53:57.870 回答
0

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

于 2013-06-18T22:32:47.427 回答
0

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

于 2015-04-26T16:19:22.127 回答
0

$location.path不支持任何param.

改为使用$location.url

于 2015-11-07T07:45:39.450 回答