$location.path在Angular指令中无法工作

7
我正在尝试在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个回答

5
尝试使用scope.$apply(注意$符号)?

嗯,是的。这解决了那个问题,但仍未解决真正的问题。现在我有了$apply already in progress。将其包装在$timeout中可以解决“already in progress”的问题,但仍无法更新路径。我会编辑我的问题...谢谢! - jab
你可能还想了解一下 $log。 - Brian Lewis
你应该能够在你的控制器中完成这一切。 - Brian Lewis
我在我的控制器上遇到了完全相同的问题 - 请参见上面的编辑。 - jab
据我所知,路由确实会改变,但由于哈希值相同,它不会重新路由。看起来你想使用 $location.search(); 请参考 http://docs.angularjs.org/api/ng.$location#search - Brian Lewis

0

scope.$apply 对我有用。先试试看。


0

$location.path 不支持任何 param

请改用 $location.url


0
问题在于Angular的$routeProvider无法匹配带有查询字符串的路径,就像我提供的那个一样,所以它又匹配了我的原始页面并重新加载了它。这里有一个类似的解决方案。虽然这是一种奇怪的症状。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接