为什么我不能在我的指令中访问$ location.path()?

时间:2014-09-17 15:04:36

标签: javascript angularjs

在我的角度应用程序中,我有一个带有一组链接的菜单,我已将链接放在一个角度指令中,我想使用当前位置来确定链接是否处于活动状态,然后向其中添加一个css类。

到目前为止,我所做的是: (剥离相关的东西)

angular.module(‘myNavigation’).directive(‘navItem’, ['$location', function($location) {

    console.log($location.absUrl());
    console.log($location.path());

    return {
        restrict: ‘EA’,
        scope: true,
        link: function (scope) {
            isCurrentLink = angular.equals(scope.item.href,$location.absUrl());
        },
        template: ‘<a ng-href=”{{item.href}}” ng-class=”{active:isCurrentLink}”>{{item.name}}</a>”
}
}]);

这样可以正常工作,但前提是我在导航数据中包含完整的网址,包括域名等。但我的指令收到的导航数据中的网址不包含域名/协议等。

然后第一个console.log给我完整的URL,但第二个返回一个空字符串。 出于某种原因,我无法在我的指令中访问$location.path()。我做错了什么?

顺便说一下,我有一个路径,我的应用程序不在根文件夹的默认页面上。

更新

我刚刚发现$ location.path()在哈希(#)之后返回url的一部分,我希望它返回没有protocol,servername和serverport的url部分。

所以当我去 https://stackoverflow.com/posts/25894149/ 时,我想要帖子/ 25894149 /

我可以使用$ location来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

我发现$location无法提供此信息。

当您加入$window时,您可以要求$window.location.pathname,这正是我所需要的。

例如,当你的网址是: 网址:http://stackoverflow.com/questions/25894149/#something

$window.location.pathname将返回 / questions / 25894149 /