我有一个客户搜索视图,默认情况下,只需加载名字和姓氏的表单。但是,它可以将这些参数作为URL中的参数。我的应用配置包含:
$stateProvider
.state({
name: "search",
url: "/search",
templateUrl: "partials/customerSearch.html",
controller: "CustomerSearchCtrl"
})
.state({
name: "searchGiven",
url: "/search/:fn/:ln",
templateUrl: "partials/customerSearch.html",
controller: "CustomerSearchCtrl"
})
这样可行,但似乎有不必要的冗余。有没有更好的办法?这是$urlRouterProvider
应该处理的事情吗?
答案 0 :(得分:25)
关于可选参数有一个issue in ui-router tracker。截至目前,您无法以明确的方式指定它们,但您可以使用正则表达式:
url: '/search{fn:(?:/[^/]+)?}'
或查询参数:
url: '/search?fn&ln'
然而,人们正在研究它,所以我希望将来某个时候可以使用所希望的功能。
答案 1 :(得分:11)
您可以使用:
$stateProvider
.state({
name: "searchGiven",
url: "/search/{fn}/{ln}",
params: {
fn: {value: 'foo'},
ln: {value: 'bar'}
},
templateUrl: "partials/customerSearch.html",
controller: "CustomerSearchCtrl"
})
答案 2 :(得分:3)
有更新,你可以这样做:
$stateProvider.state("foo", {
url: "/search/{fn}/{ln}"
});
正如nateabele对有关可选参数的问题发表了评论:view here