如何在路径中间的状态(目标状态的祖先)上指定状态参数?

时间:2016-05-12 18:56:39

标签: javascript angularjs angular-ui-router deep-linking url-parameters

花费时间在谷歌搜索和梳理文档angular ui-router docs无济于事......似乎这应该是非常基本的。

快速版

<小时/> 寻找我想象的东西可能看起来像这样

<a ui-sref="parent({param: value}).child">go</a>

或者

$state.go("parent.child", {parent:{param: value}})

- 我的想法是param应用于parent,而不是child,从而产生了/parent/value/child等网址

长版

<小时/> 设置:

假设我有一个采用参数projectId的状态,如下所示:

.state('manage.project', {
    url: '/project/:projectId',
    templateUrl: 'fragments/projectTemplate.html',
    controller: 'projectController' 
}

...然后沿着状态树,我有许多依赖于该参数的子状态之一:

.state('descendantOfProjectState.grandchildState', {
    url: '/projectInfo',
    templateUrl: 'fragments/projectInfo.html',
    controller: function($state){
         var projectId = $state.params.projectId;
    } 
}

通常情况下,首先会访问父母:

$state.go('manage.project', {projectId: 123})

此时,URL看起来像

  

/管理/项目/ 123 /富/酒吧/ projectInfo

从那里,导航到子状态就像

一样简单
$state.go("manage.project.foo.bar.descendantOfProjectState.grandchildState");

并且可以通过$ state.params访问projectId,因为它位于URL中 - 无需配置每个子状态以明确期望projectId(想知道这是否是我的致命缺陷)。

问题:

现在需要跳转到那个孙子状态,而不首先访问父状态。也就是说,我想直接进入

  

/管理/项目/ 123 /富/酒吧/ projectInfo

来自 应用程序(所以,我想转到状态,而不是网址)。

当我在导航到的路线中间时,如何为项目状态指定projectId参数?

$state.go('manage.project.foo.bar.descendant.grandchild', {projectId: 123})

不通知需要id的祖先状态。

我怎么能一下子告诉ui-router直接进入那个孙子状态,同时将projectId传递给位于路线中间的manage.project状态?

0 个答案:

没有答案