ui-router在$ state.go

时间:2016-07-25 14:25:03

标签: angularjs angular-ui-router

我有一条路线:

$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';
    }
}

1 个答案:

答案 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。

“任意字符串”:参数的默认值将替换为您选择的任意占位符。