我有两个路由通向相同的视图和控制器(即我只是传入一个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'
})
答案 0 :(得分:3)
From $routeProvider
source code,在我看来,这是不可能的。 this.when
方法接受两个参数path
和route
。对于多路径,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);