Javascript 在ui路由器中将可选参数作为父状态
我的Angular应用程序中有一些状态,它们都有Javascript 在ui路由器中将可选参数作为父状态,javascript,angular,Javascript,Angular,我的Angular应用程序中有一些状态,它们都有myParent作为父状态: var myChild1 = { name: 'myChild1', parent: 'myParent', url: '/mychild1' ... }; var myChild2 = { name: 'myChild2', parent: 'myParent', url: '/mychild2' ... }; 下面是myParent var myParent = { name
myParent
作为父状态:
var myChild1 = {
name: 'myChild1',
parent: 'myParent',
url: '/mychild1'
...
};
var myChild2 = {
name: 'myChild2',
parent: 'myParent',
url: '/mychild2'
...
};
下面是myParent
var myParent = {
name: 'myParent',
abstract: true,
url: '/:username/:password',
resolve: {
authorized: [
myService,
'$stateParams',
function (myService, $stateParams) {
console.log($stateParams);
myService.doSomething() // unrelated
}
]
}
};
我想按如下方式访问它:
/mychild1/superman/superpassword
但是,它只允许我这样访问它:
/superman/superpassword/mychild1
如果我用第二种方法,我不能使参数成为可选的。我认为我的解决方案在某种意义上是不正确的。如何使所有子项的参数都是可选的?(我知道我可以在url
中为每个孩子定义参数,但这不是好的做法)
**顺便说一句,我知道这不是正确的身份验证。。这只是我目前正在使用的一个例子;) 要像
/mychild1/superman/superpassword
一样访问它,您需要在子状态上同时具有这两个参数,如您所述:
var myChild1 = {
name: 'myChild1',
parent: 'myParent',
url: '/mychild1/:username/:password'
...
};
如果您不想多次编写该函数(这样您就可以将逻辑保留在一个地方——重复代码不是一个好的做法是正确的),您可以自己创建一个helper函数,如下所示:
function generateChildUrl(name) {
return name + '/:username/:password';
}
var myChild1 = {
name: 'myChild1',
parent: 'myParent',
url: generateChildUrl('/mychild1')
...
};