通过名字查找angularjs routeprovider的路线

时间:2014-01-30 08:55:02

标签: angularjs angularjs-routing

我正在定义这样的路线。

$routeProvider
.when('/Home', {
     name: 'Main',
     templateUrl: 'Main.html',
     controller: 'MainController',
     controllerAs: 'ctrl'
})
.when('/About', {
     name: 'About',
     templateUrl: 'About.html',
     controller: 'AboutController',
     controllerAs: 'ctrl'
})

当我在主控制器中时,如何在控制器中通过查询名称“关于”找到'/ About'URL?

4 个答案:

答案 0 :(得分:7)

您可以向控制器注入$location并使用$location.path()或注入$route获取网址以获取路由名称。

示例:

function MainCntl($scope,$location,$route) {
  $scope.location = $location.path(); // '/Home'
  $scope.routeName= $route.current.$$route.name; //'Main'
}

答案 1 :(得分:7)

由于没有内置任何东西,路线的扩展可以很好地解决这个问题:

$provide.decorator('$route', ($delegate) => {

    $delegate.getRoute = (name) => {
        var result = null;
        angular.forEach($delegate.routes, (config, route) => {
            if (config.name === name) {
                result = route;
            }
        });
        return result;
    };

    return $delegate;
});

答案 2 :(得分:0)

检查问题:

我的解决方案如下:

Patch

鉴于实例化控制器后路由对象可能为空,您应该使用Object.getPrototypeOf($route.current) === $route.routes['/Home']; 事件,如下所示:

$routeChangeSuccess

不需要声明其他属性(尽管如果角度允许它会很好)。你只需使用模式字符串。

正如我在其他两个问题中所说,这是行为没有记录($ route.current和$ route.routes都记录在案,但它们之间的原型继承不是),所以请自行使用它风险。

这也适用于IE9 +。

答案 3 :(得分:-1)

如果您的目的是切换网址路径, 你可以试试这个:

function MainCntl($scope, $location) {

    // put this at where your want to find the '/About' URL
    $location.path('/About'); 

}