如何为 angular 路由参数设置可接受的值?
How to set accepted values for angular route parameter?
我必须制作两种类型的 url:/:culture
和 /:author
,它们都有一级 url 参数。虽然文化是一组预定义参数,如 en
、es
、en-us
、br
、fr
、it
等,但作者可能是来自数据库的任何用户名(文化名称除外)。所以我想创建一个路由,当参数在一组文化中时,可以将用户发送到 HomeCtrl
,如果不是,它会将他发送到 AuthorCtrl
。我能做什么?
.when('/:culture/', {
templateUrl:'partials/home/home',
controller:'vvHomeCtrl'
});
您可以将 templateUrl 和 controller 定义为函数,并将此路由设置为:
.when('/:cultureOrAuthor/', {
templateUrl: function(params) {
// AVAILABLE_CULTURES is your predefined array
if(AVAILABLE_CULTURES.indexOf(params['cultureOrAuthor'])!==-1) {
return 'urlForCultures';
} else {
return 'urlForAuthors';
}
},
controller: function($scope, $routeParams) {
if(AVAILABLE_CULTURES.indexOf($routeParams['cultureOrAuthor'])!==-1) {
// first logic
} else {
// second logic
}
}
});
对于简单的控制器来说,这是一个很好的解决方案。否则考虑使用来自路由器的解析 (docs).
我通过检查文化参数是否有效来同意@Mates 解决方案。然而,我可能会尝试使用 redirectTo
属性 来分隔两条路线。
.when('/:culture/', {
templateUrl:'partials/home/home',
controller:'vvHomeCtrl',
redirectTo:function(routeParams, path, search) {
if(cultures.indexOf(routeParams.culture)!==-1) {
//return path(string) to author route
}
return path;
}
})
.when(/* Author route definition */);
我必须制作两种类型的 url:/:culture
和 /:author
,它们都有一级 url 参数。虽然文化是一组预定义参数,如 en
、es
、en-us
、br
、fr
、it
等,但作者可能是来自数据库的任何用户名(文化名称除外)。所以我想创建一个路由,当参数在一组文化中时,可以将用户发送到 HomeCtrl
,如果不是,它会将他发送到 AuthorCtrl
。我能做什么?
.when('/:culture/', {
templateUrl:'partials/home/home',
controller:'vvHomeCtrl'
});
您可以将 templateUrl 和 controller 定义为函数,并将此路由设置为:
.when('/:cultureOrAuthor/', {
templateUrl: function(params) {
// AVAILABLE_CULTURES is your predefined array
if(AVAILABLE_CULTURES.indexOf(params['cultureOrAuthor'])!==-1) {
return 'urlForCultures';
} else {
return 'urlForAuthors';
}
},
controller: function($scope, $routeParams) {
if(AVAILABLE_CULTURES.indexOf($routeParams['cultureOrAuthor'])!==-1) {
// first logic
} else {
// second logic
}
}
});
对于简单的控制器来说,这是一个很好的解决方案。否则考虑使用来自路由器的解析 (docs).
我通过检查文化参数是否有效来同意@Mates 解决方案。然而,我可能会尝试使用 redirectTo
属性 来分隔两条路线。
.when('/:culture/', {
templateUrl:'partials/home/home',
controller:'vvHomeCtrl',
redirectTo:function(routeParams, path, search) {
if(cultures.indexOf(routeParams.culture)!==-1) {
//return path(string) to author route
}
return path;
}
})
.when(/* Author route definition */);