$ location.path在Angular指令中不起作用

时间:2013-06-18 19:41:21

标签: angularjs angularjs-directive

我正在尝试从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但是在这里我试图将一个查询字符串附加到路由中。如果我使用常规<a href="#/comments?post={{post.postId}}">,这可以正常工作,但不知何故通过$location.path设置相同的路线是行不通的。这与此代码是否在控制器或指令中无关。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

范围。$ apply 为我工作。先试试吧。

答案 3 :(得分:0)

$location.path不支持任何param

改为使用$location.url