2016-04-27 4 views
3

Ich habe beiden Routen zu der gleichen Ansicht und Controller führen (das heißt ich bin nur in einer ID für den Zugriff auf $ routeParams und Controller-Logik gegenüber auf mich):

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

Dieses sehr repetitiv fühlt. Gibt es eine Kurzschrift, so etwas?

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

Antwort

3

From $routeProvider source code, es scheint mir, dass es nicht möglich ist. this.when Methode akzeptiert zwei Parameter, path und route. Für mehrere Pfade sollte this.when entweder das Array des Pfads als Parameter akzeptieren oder mehrere Pfade aus einer einzelnen Zeichenfolge extrahieren. Ich sehe keine dieser beiden bei dieser Methode.

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; 
    }; 
Verwandte Themen