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 

我在他们的文档中找不到任何东西。

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

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

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

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

 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

你可以使用一个函数来生成模板string:

 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:'/'}); } ); 

其实我觉得OZ_可能有点正确。

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

@JamesBell你可以使用压扁选项,如在这篇文章中回答: 应用程序状态与可选参数和没有结尾斜杠

 .state('path', { url: '/path/:param1', params: { param1: { value: null, squash: true } }, views: { 'map-tab': { templateUrl: 'templates/map.html', controller: 'testCtrl' } } })