使用类似的URL模式时,UI路由器发生冲突

时间:2015-11-09 09:16:02

标签: angularjs angular-ui-router

我的app.config中定义了以下两种状态:

SELECT * FROM table_name where (id = (select max(id) from table_name) || id = (select min(id) from table_name))

state('product-details', {
    url: '/products/:productId',
    templateUrl: '/pages/product-details/product-details.tmpl.html',
    controller: 'ProductDetailsController'
})

我面临的问题是因为他们的网址模式都相似,当我尝试导航到state('product-register', { url: '/products/register', templateUrl: '/pages/product-register/product-register.tmpl.html', controller: 'ProductRegisterController' }) 状态时,'register'被angularui-router解释为product-register并重定向我改为productId州。

在对SO进行了一些类似的问题之后,我想我会使用正则表达式过滤这些网址,如here所述。但是当我尝试这个时,虽然正则表达式是孤立地匹配,但是状态拒绝改变。

然后在做了一些研究后,我决定合并这两个州:

product-details

这似乎也没有按预期工作。我错过了什么?这不是一件非常正常的事吗?

2 个答案:

答案 0 :(得分:3)

尝试移动'产品注册'之前的状态'产品细节'州。

实际上你需要区分你的状态网址模式,否则angular会触发它会找到的第一个匹配。

答案 1 :(得分:1)

您应该能够为参数指定类型以仅匹配特定状态。

在您的情况下,您可以使用:

url: '/products/{productId:int}'

ui路由器页面上有很多其他示例: https://github.com/angular-ui/ui-router/wiki/URL-Routing