Angularjs 路由可以有可选的参数值吗?

我可以设置一个路由与可选的参数(相同的模板和控制器,但一些参数应该被忽略,如果他们不存在?

因此,与其写下以下两条规则,不如只写一条?

module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}).
when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

类似这样的东西([这个参数是可选的])

when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl})
//note: this previous doesn't work

我在他们的文件里找不到任何东西。

148232 次浏览

事实上,我认为 OZ _ 可能有些正确。

如果您有路由 '/users/:userId'并导航到 '/users/'(注意尾随/) ,则控制器中的 $routeParams应该是1.1.5中包含 userId: ""的对象。所以参数 userId并没有被完全忽略,但是我认为这是你能得到的最好的结果。

看起来 Angular 现在已经支持这个了。

来自 $routeProvider.when(path, route)的最新(v1.2.0)文档:

path可以包含带问号(:name?)的可选命名组

就像@g-george 提到的,你可以这样做:

module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

您还可以根据需要制作任意数量的可选参数。

请点击@jlareau 查看答案: https://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

可以使用函数生成模板字符串:

var app = angular.module('app',[]);


app.config(
function($routeProvider) {
$routeProvider.
when('/', {templateUrl:'/home'}).
when('/users/:user_id',
{
controller:UserView,
templateUrl: function(params){ return '/users/view/' + params.user_id;   }
}
).
otherwise({redirectTo:'/'});
}
);