javascript - 在 ui-router 中将可选参数作为父状态

标签 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',
  abstract: true,
  url: '/:username/:password',
  resolve: {
    authorized: [
      myService,
      '$stateParams',
      function (myService, $stateParams) {
        console.log($stateParams);

        myService.doSomething() // unrelated
      }
    ]
  }
};

我想像下面这样访问它:

/mychild1/superman/superpassword

但是,它只让我像这样访问它:

/superman/superpassword/mychild1

如果我采用第二种方式,我就无法将参数设置为可选。我认为我的解决方案在某种意义上并不正确。如何使参数对所有 child 都是可选的? (我知道我可以在 url 中为每个 child 定义参数,但这不是一个好的做法)

** 顺便说一句,我知道这不是正确的身份验证..这只是我目前使用的一个示例;)

最佳答案

要像 /mychild1/superman/superpassword 一样访问它,您需要在子状态上拥有这两个参数,就像您提到的那样:

var myChild1 = {
  name: 'myChild1',
  parent: 'myParent',
  url: '/mychild1/:username/:password'
  ...
};

如果您不想多次编写该代码(这样您就可以将逻辑保留在一个地方 - 您认为重复代码不是一个好的做法是正确的),您可以为自己创建一个辅助函数,例如所以:

function generateChildUrl(name) {
  return name + '/:username/:password';
}

var myChild1 = {
  name: 'myChild1',
  parent: 'myParent',
  url: generateChildUrl('/mychild1')
  ...
};

关于javascript - 在 ui-router 中将可选参数作为父状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359921/

相关文章:

Angular 2 - 防止变更检测

angular - npm 错误!解析附近时 JSON 输入意外结束

angular - 取消订阅服务内部的 Observables?

javascript - 为什么即使我有条件地渲染组件, Prop 也未定义?

javascript - 使用 CSS 和 jQuery 控制切换按钮

javascript - 当 div 上有其他文本时居中对齐文本

node.js - 如何避免 angular2 巨大的足迹

具有事件绑定(bind)的 Angular 组件的 CSS 选择器

javascript - 如何为Jquery创建的元素添加Angular的ng-click?

javascript - 尝试从有效的 LatLng 对象创建 LatLngBounds 对象时出错