2016-07-25 89 views
0

后,我有一个路线:

$stateProvider.state('keeper.telepay.category', { 
    url: '/category-{id}/country-{cid}/region-{rid}' 
} 

在所有情况下,当我使用$这个路线state.go,我想摆脱更改为“所有”如果它的值是 '0',所以我url'll像

/1类/国家-195 /地区所有

我试图做到这一点在$ rootScope。$上('$ stateChangeStart'),但没有运气。任何建议||方向将非常感激。

UPDATE

这里我已经试过在$ 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

应该在'$ rootScope。$ on('$ stateChangeStart')'中发布你已经尝试过的东西,因为这就是人们会提出的建议。 – KreepN

+1

也许你可以用[$ urlMatchFactory](http://angular-ui.github.io/ui-router/site/#/api/ui.router.util.$urlMatcherFactory)开始试用以创建你自己的参数类型。 – MMhunter

+0

好的建议,thx – Kindzoku

回答

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中的表示方式。

有三个壁球设置:

:该参数的默认值未压扁。它被编码并包含在URL中

true:该参数的默认值从URL中省略。如果该参数在状态的url声明中前后跟有斜杠,那么其中一个斜杠将被忽略。这可以允许更清晰的外观网址。

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