用于保留AND动态URL的UI-Router url正则表达式

时间:2014-09-12 06:29:13

标签: angularjs angular-ui-router

我想为用户个人资料提供相当好的网址,例如url.com/username

但也保留了网址,例如url.com/categories,url.com / login等。

我有保留网址的状态设置,例如

.state('categories',{
        url:'/categories',     // i.e. url.com/categories
        ...
    });

然后我尝试为根状态提供一个正则表达式,该正则表达式与用户名匹配,并且与上述保留的url状态不匹配,例如。

$stateProvider
    .state('profile',{
        url:'/{username:^((categories|login(?!$)).+|(?!categories|login).+)$}',
        ...
    });

我查看了UI-Router URL-Routing文档(https://github.com/angular-ui/ui-router/wiki/URL-Routing)并尝试了解urlMatcher,并使我的正则表达式符合要求。

目前它将把我带到保留状态,例如url.com/categories但如果我尝试访问url.com/someusername,它不会加载配置文件并带我到url.com /

我需要更改我的正则表达式吗?

是否可以使用某个正则表达式执行此操作,或者urlMatcher无法处理保留的+动态网址/' s不匹配'正则表达式?

1 个答案:

答案 0 :(得分:1)

您设置州的顺序在这里很重要。当它找到第一个匹配时,它将停止查找并使用它匹配的第一个状态。

当您想要在其他状态之前捕获某些状态时,这非常有用。您可以在设置动态状态之前设置所有保留状态。

$stateProvider
    .state('categories',{
         url:'/categories',
         ...
     })
    .state('login',{
         url:'/login',
         ...
    })
    .state('profile',{
         url:'/:username',
         ...
     });

示例:http://fiddle.jshell.net/TheSharpieOne/ftxfceg1/1/