Javascript 在ui路由器中将可选参数作为父状态

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

我的Angular应用程序中有一些状态,它们都有
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')
  ...
};