AngularJS $ routeProvider是否有一种简单的方法来让多条路由具有相同的设置?

时间:2016-04-27 03:53:07

标签: angularjs

我有两个路由通向相同的视图和控制器(即我只是传入一个id来访问$ routeParams并在其上执行控制器逻辑):

$routeProvider
        .when('/about',
        {
            controller: 'AboutController',
            controllerAs: 'vm',
            templateUrl: 'about.html'
        })
        .when('/about/:id',
        {
            controller: 'AboutController',
            controllerAs: 'vm',
            templateUrl: 'about.html'
        });

这感觉非常重复。有没有这样的简写?

$routeProvider
            .when(['/about', '/about/:id'],
            {
                controller: 'AboutController',
                controllerAs: 'vm',
                templateUrl: 'about.html'
            })

2 个答案:

答案 0 :(得分:3)

From $routeProvider source code,在我看来,这是不可能的。 this.when方法接受两个参数pathroute。对于多路径,this.when应该接受路径数组作为参数,或者从单个字符串中提取多个路径。我不会在这种方法中看到这两个中的任何一个。

this.when = function(path, route) {
    //copy original route object to preserve params inherited from proto chain
    var routeCopy = angular.copy(route);
    if (angular.isUndefined(routeCopy.reloadOnSearch)) {
      routeCopy.reloadOnSearch = true;
    }
    if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {
      routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;
    }
    routes[path] = angular.extend(
      routeCopy,
      path && pathRegExp(path, routeCopy)
    );

    // create redirection for trailing slashes
    if (path) {
      var redirectPath = (path[path.length - 1] === '/')
            ? path.substr(0, path.length - 1)
            : path + '/';

      routes[redirectPath] = angular.extend(
        {redirectTo: path},
        pathRegExp(redirectPath, routeCopy)
      );
    }

    return this;
  };

答案 1 :(得分:1)

这感觉非常重复。有速记吗...

.when()的first( path )参数不能有多个值。

但是您可以通过考虑第二个参数( route )是一个对象这一事实来减少代码。

因此,从此更改代码:

$routeProvider
        .when('/about',
        {
            controller: 'AboutController',
            controllerAs: 'vm',
            templateUrl: 'about.html'
        })
        .when('/about/:id',
        {
            controller: 'AboutController',
            controllerAs: 'vm',
            templateUrl: 'about.html'
        });

对此:


var aboutControllerRC = {
                controller: 'AboutController',
                controllerAs: 'vm',
                templateUrl: 'about.html'
            };

    $routeProvider
            .when('/about', aboutControllerRC)
            .when('/about/:id', aboutControllerRC);