我已经使用2个参数定义了一个url状态,一个是可选的,如下所示:
.state('productsByCategory', {
url: '/products/:catSlug/:subCatSlug?',
controller: 'ProductCtrl',
templateUrl: '/app/products/list.html',
})
我正在生成这样的链接:
<a ui-sref="productsByCategory({
catSlug: 'main-category', subCatSlug: 'sub-category'
})">Sub category</a>
这会生成类似href="/products/main-category/sub-category"
(完美)
<a ui-sref="productsByCategory({
catSlug: 'main-category', subCatSlug: null
})">Main category</a>
这会生成一个类似href="/products/main-category/"
的网址 - 带有额外的尾随/
!
我希望此网址为:href="/products/main-category"
我的问题:如果没有提供subCatSlug
,如何删除尾部斜杠?
由于
答案 0 :(得分:2)
经过深入研究ui-router
后,我改变了一点,放弃了试图去除尾随斜线。相反,我只拿了一个slu and并把那个slu put放在ui-sref
:
.state('productsByCategory', {
url: '/products/{slug:any}',
controller: 'ProductCtrl',
templateUrl: '/app/products/list.html',
})
any
位非常重要,因为它会阻止/
进行编码。
<a ui-sref="productsByCategory({
slug: 'main-category/sub-category'
})">Sub category</a>
这仍会生成类似href="/products/main-category/sub-category"
现在:
<a ui-sref="productsByCategory({
slug: 'main-category'
})">Main category</a>
生成href="/products/main-category"
,没有斜杠:)
---- ---- EDIT
说得太快了。它的作用就是单击浏览器中的链接,但检查/复制生成的href会显示/
已编码。我仍然需要像这里建议的解决方法:https://github.com/angular-ui/ui-router/issues/733
在UrlMatcher.prototype.format
方法中:
result += param.type.name == 'any' ? encoded : encodeURIComponent(encoded);