Angularjs 我想动态应用ui路由器中的参数

Angularjs 我想动态应用ui路由器中的参数,angularjs,Angularjs,对于类别的URL,我有一些参数,比如/:rootcategory/:sub/:sub,这是动态的,对于产品,我必须路由像/product/:productname/:producturl。。。。。使用ui-sref可以很好地工作,但是当我打开URL并刷新它时,配置会变得混乱,在这两种URL情况下,它都会在分类页面上发送给我 .state('category3',{ url: '/:name1/:name2/:name3', templateUrl: 'templa

对于类别的URL,我有一些参数,比如/:rootcategory/:sub/:sub,这是动态的,对于产品,我必须路由像/product/:productname/:producturl。。。。。使用ui-sref可以很好地工作,但是当我打开URL并刷新它时,配置会变得混乱,在这两种URL情况下,它都会在分类页面上发送给我

.state('category3',{
        url: '/:name1/:name2/:name3',
        templateUrl: 'template/product/productsgridpage.html',
        controller: 'categoryCtrl',
        parent: 'productpagelayout'
    })
.state('product', {
            url: '/product/:name1/:name2',
            templateUrl: 'template/product/detailpage.html',
            controller: 'productCtrl',
            parent: 'productpagelayout',
        })

更新答案:

问题是category也会验证产品页面,category状态(
/:name1/:name2/:name3
)的url参数将接受(
/product/disc/test
),因为name1没有任何特殊检查来限制关键字
products
不通过。所以我建议做一个正则表达式检查,它会限制关键字product,这样这个问题就不会发生

类别的正则表达式如下

url:'/{name1:\b(?!\bproduct\b)\w+\b}/:name2/:name3',

如果name1参数以product开头,则正则表达式检查将失败,并且不会输入类别状态,因此它将转到product状态,这是我们需要的

.state('category3',{
    url: '/{name1:\b(?!\bproduct\b)\w+\b}/:name2/:name3',
    templateUrl: 'template/product/productsgridpage.html',
    controller: 'categoryCtrl',
    parent: 'productpagelayout'
})
.state('product', {
        url: '/product/:name1/:name2',
        templateUrl: 'template/product/detailpage.html',
        controller: 'productCtrl',
        parent: 'productpagelayout',
})
先前的答案:

由于您传递的是“products/hplaptop5050/hp laptop”它将products参数本身作为一个类别,因此转到category,因此您需要一个静态变量,甚至是一个唯一的输入变量,以便它不会混淆,我是否可以建议类似“/{categoryid:int}/:name1/:name2/:name3”“/0/:name1/:name2/:name3”,因此我们与产品和类别页面有明显区别

.state('category3',{
        url: '/{categoryid:int}/:name1/:name2/:name3',
        templateUrl: 'template/product/productsgridpage.html',
        controller: 'categoryCtrl',
        parent: 'productpagelayout'
    })
.state('product', {
            url: '/product/:name1/:name2',
            templateUrl: 'template/product/detailpage.html',
            controller: 'productCtrl',
            parent: 'productpagelayout',
        })
请阅读UI路由器文档中的状态声明部分,如果需要,您可以提出不同的方法


参考资料:

你能不能在URL的开头添加/category/,就像你对产品所做的那样。这可能会解决你的问题。但我想为电子产品/computer/tab和产品/hplaptop5050/hp laptop这样的产品创建一个URL谢谢你的回答,但我想创建一个类似flipcart的应用程序,其中所有类别是动态出现的,甚至是带有url的产品名称,而不是任何静态关键字。@Amansharma如果希望按原样发送,请忽略产品密钥,url有一个自定义正则表达式参数,因此
url:'/{name1:\b(?!\bproduct\b)\w+\b}/:name2/:name3'
它将仅排除product关键字。没有测试它的工具,如果可能,请检查它。URL参数也可以在内部使用正则表达式。谢谢。但是这里,name1不是productname,而是类别名称。那么当我编写/name1;categoryname/或/{name1:\b(?!\categoryname\b)\w+\b}时会发生什么/.两者是否相同?