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' } } })