【发布时间】:2015-11-09 09:16:02
【问题描述】:
我的 app.config 中定义了以下 2 个状态:
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'
})
我面临的问题是,由于它们的 URL 模式相似,当我尝试导航到 product-register 状态时,“注册”被 angularui-router 解释为 productId 并将我重定向到 product-details改为状态。
在解决了一些关于 SO 的类似问题后,我想我会使用正则表达式过滤这些 URL,如 here 所述。但是当我尝试这个时,虽然正则表达式单独匹配正确,但状态拒绝改变。
在做了一些研究之后,我决定像这样合并这两个状态:
state('product-details', {
url: '/products/:param',
templateUrl: ['$stateParams', function($stateParams) {
if($stateParams.param === 'register') {
return '/pages/product-register/product-register.tmpl.html';
} else {
return '/pages/product-details/product-details.tmpl.html';
}
}],
controller: ['$stateParams', function($stateParams) {
if($stateParams.param === 'register') {
return 'ProductRegisterController';
} else {
return 'ProductDetailsController';
}
}]
})
这似乎也没有按预期工作。我错过了什么?这不是很正常的事情吗?
【问题讨论】:
-
你不能把你的路线描述为
url: '/products/detail/:productId'吗? -
我可以,但这不是我的意思:)
标签: angularjs angular-ui-router