Javascript 灵活处理大量参数

Javascript 灵活处理大量参数,javascript,arrays,angularjs,angular-ui-router,Javascript,Arrays,Angularjs,Angular Ui Router,我的代码上有这样一句话: .state('category', { url: '/categories/:parameter', templateUrl: 'templates/common/categories.html', controller: 'categoriesCtrl', resolve : { categoryList: ['Products', function (Products) { return Products.l

我的代码上有这样一句话:

.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

所以,参数必须是动态的,我不知道怎么做。有人能帮我吗?谢谢大家!

通常我看到这样做的方式是用“-”或“+”而不是斜杠来分隔类别,因为它们不是目录,这也会弄乱大多数url路由器(在本例中为角型)。
您也可以自己查找匹配整个URL和解析斜杠,但如果使用“-”或“+”,您可以将整个目录解析为字符串,然后根据分隔符进行分隔,以获得要搜索的类别列表。

在我看来,您有两个选项:

选项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);
    }
});
$stateProvider.state('category', {
    // Pattern can be changed except the \/
    url: '/categories/{details:[a-z0-9\/\-]{0,20}}',
    controller: function($stateParams) {
        console.log($stateParams);
    }
});
您将能够使用:

  • /categories/shoes//
  • /categories/shoes/man/
  • /categories/shoes/man/running/
  • /categories/shoes/man/running/nike
选项2(我喜欢):

$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);
    }
});
$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
现在你只需要使用这个方法,然后决定:

  • 键0将包含项
  • 键1将包含性别

  • 对于您或客户输入性别而不是项目的情况,您可以对照
    项目白名单(包含项目的数组)
    检查
    键0
    ,享受。

    您希望所有这些路由由同一控制器处理吗?嗨!是的…在/categories/之后的任何内容都是一个灵活的参数,理论上可以包含无限的子项。我需要在类别之后指出整个路径。所以只需用斜杠拆分这个参数,就可以了。不可能…首先,因为类别可以自然地有“-”,使用路径也有利于站点地图和SEO。我真的不想这样。确实有必要使用路径格式。我使用正则表达式在node.js中构建了类似的东西,该正则表达式用于转换数组中的参数。看看:app.get(/^\/products\/list\/categories\/((?:[^\/]+\/?)+)/,productsCategories.index);是 啊我也喜欢选项2:)泰维姆,阿维埃尔!通常,当我对angular有疑问时,社区会帮助我找到解决方案,他们过去傲慢自大,建议改变我制作东西的方式……所以,感谢你做一个谦逊和善的人!