angularjs 路由可以有可选的参数值吗?
Posted
技术标签:
【中文标题】angularjs 路由可以有可选的参数值吗?【英文标题】:Can angularjs routes have optional parameter values? 【发布时间】:2013-07-04 20:38:34 【问题描述】:我可以设置带有可选参数的路由(相同的模板和控制器,但如果它们不存在应该忽略某些参数?
所以不要写下面两条规则,只有一条?
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
我在他们的文档中找不到任何内容。
【问题讨论】:
在 1.1.5 版本中它们将被忽略(没有[]
)。
真的吗?我在 1.1.5 ,尝试使用代码 [:userId] 并且没有忽略它们。
尝试不使用[]
。请参阅此提交:github.com/angular/angular.js/commit/…
哎呀,对不起,这是关于 $resource 的,不确定它是否适用于路由。对不起。
如果 g-orge 的答案很好,请您标记一下,这样人们就不必滚动整个内容即可找到最佳答案?
【参考方案1】:
现在看来 Angular 已经支持这个了。
来自$routeProvider.when(path, route)
的最新 (v1.2.0) 文档:
path
可以包含带有问号 (:name?
) 的可选命名组
【讨论】:
有什么方法可以避免使用斜杠吗?如果我的路线是:.when('/claims/documents/:CLAIMS_ID/:DOCUMENT_NAME?'...
,如果 url 没有尾部斜杠,它将不匹配。所以/claims/documents/1234/
匹配,但/claims/documents/1234
不匹配。
想知道是否有人对@JamesBell 报告的问题有解决方案
从 Angular 1.3 开始,上述 cmets 中提到的斜杠问题已修复。导航到 /claims/documents/1234/ 可以正常工作,/claims/documents/1234 也是如此。简而言之,它可以带或不带斜杠。
如果我的路线中有一个可选参数,我仍然会看到这种行为。例如:如果路线是:'/:classification?/package/compare' 并且我尝试导航到 url "/package/compare" 它可以工作。如果我出于某种原因尝试“/package/compare/”,则会将 asci 代码附加到分类中,或者“/%3f/package/compare”不是实际路线。
文档混乱。【参考方案2】:
就像@g-eorge 提到的,你可以这样:
module.config(['$routeProvider', function($routeProvider)
$routeProvider.
when('/users/:userId?', templateUrl: 'template.tpl.html', controller: myCtrl)
]);
您也可以根据需要设置可选参数。
【讨论】:
【参考方案3】:请在此处查看@jlareau 答案:https://***.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:'/');
);
【讨论】:
【参考方案4】:其实我认为 OZ_ 可能有些正确。
如果您有路由 '/users/:userId'
并导航到 '/users/'
(注意尾随 /),则控制器中的 $routeParams
应该是 1.1.5 中包含 userId: ""
的对象。所以没有参数userId
没有被完全忽略,但我认为这是你会得到的最好的。
【讨论】:
以上是关于angularjs 路由可以有可选的参数值吗?的主要内容,如果未能解决你的问题,请参考以下文章