我的代码中有这句话:
.state('category', {
url: '/categories/:parameter',
templateUrl: 'templates/common/categories.html',
controller: 'categoriesCtrl',
resolve : {
categoryList: ['Products', function (Products) {
return Products.listByCategories($stateParams.parameter);
}]
}
})
它只是一个简单的网上商店,你知道......根据类别列出产品。问题是类别的数量必须是动态的...我可以,例如请求:
/categories/shoes
/categories/shoes/man/
/categories/shoes/man/running
/categories/shoes/man/running/nike
因此,参数必须是动态的,我不知道如何做到这一点。谁能帮我?谢谢!
答案 0 :(得分:1)
我认为你有两种选择:
选项1(我不建议使用,但这是一个选项):
$stateProvider.state('category', {
// All patterns may be changed, just remember to keep the {0, x} the 0 is important to allow // emptiness between slashes.
url: '/categories/{item:[a-z0-9\-]{0,8}}/{gender:[a-z]{0,6}}/{sport:[a-z]{0,12}}/{company:[a-z0-9]{0,8}}',
controller: function($stateParams) {
console.log($stateParams);
}
});
您将可以使用:
/categories/shoes///
/categories/shoes/man//
/categories/shoes/man/running/
/categories/shoes/man/running/nike
选项2(我喜欢):
$stateProvider.state('category', {
// Pattern can be changed except the \/
url: '/categories/{details:[a-z0-9\/\-]{0,20}}',
controller: function($stateParams) {
console.log($stateParams);
}
});
现在,您可以使用任何组合,只要它以/categories/
开头:
/categories/shoes/man/running/nike
现在你只需要使用split()方法然后决定:
如果您或客户输入性别而不是项目,您可以key 0
对items whitelist(array with items)
进行检查,享受。
答案 1 :(得分:0)
通常,我已经看到这样做的方法是将类别与' - '或者' +'而不是斜杠,因为它们不是目录,并且还会混淆大多数url路由器(在这种情况下为angular)。 您还可以查看匹配整个URL并自行解析斜杠,但如果您使用' - '或' +'您可以将整个目录解析为字符串,然后根据分隔符分隔以获取要搜索的类别列表。