我有一条路线:
$stateProvider.state('keeper.telepay.category', {
url: '/category-{id}/country-{cid}/region-{rid}'
}
在我使用$ state.go的所有情况下,如果它的值为'0',我想将 rid 更改为'all',所以我的url就像
/类别-1 /国家-195 /地区所有
我已经尝试在$ rootScope。$ on('$ stateChangeStart')中执行此操作,但没有运气。任何建议||方向将非常感激。
更新
这是我在$ stateChange上试过的:
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
if(toState.name == 'keeper.telepay.category' && toState.params.rid == 0) {
toState.params.rid = 'all';
}
}
答案 0 :(得分:1)
我偶然发现了这个链接http://angular-ui.github.io/ui-router/feature-1.0/interfaces/params.paramdeclaration.html#squash
所以纯粹的解决方案是:
$stateProvider.state('keeper.telepay.category', {
url: '/category-{id}/country-{cid}/region-{rid}',
params: {
cid: '195',
rid: {
value: '0',
squash: "all" <-- do the trick
}
}
});
以下是描述:
配置当前参数值与默认值相同时,URL中如何表示默认参数值。
有三种壁球设置:
false :参数的默认值不会被压扁。它被编码并包含在URL
中true :URL中省略了参数的默认值。如果参数在状态的url声明中以斜杠开头并且后跟斜杠,则省略其中一个斜杠。这可以允许更清晰的URL。
“任意字符串”:参数的默认值将替换为您选择的任意占位符。