使用$ state.go()时,ui-router不会运行父状态的解析承诺

时间:2014-08-17 21:59:48

标签: angularjs angular-ui-router states

我有一个带有解析承诺的抽象父状态,它返回有关当前用户的信息。这些信息被注入所有子州的控制者。

但是,当我使用$state.go('parent.child')时,未执行解析承诺功能。如果我浏览到表示该状态的URL,则执行正常。

我是否需要在每个子状态上指定resolve对象并从父对象中省略它?

2 个答案:

答案 0 :(得分:9)

父状态解析只会针对给定的一组$stateParams值解析一次。如果父状态不依赖于$stateParams或不使用任何状态,那么无论子状态如何变化,其依赖关系都只会被解析一次。

您看到的行为差异是子状态更改不会导致重新加载父资源,而位置更改将在重新加载完整的父级和子级状态时使用。

您可以在此plunk中观察到此行为。

该示例在子状态所依赖的父状态中具有$stateParams值。通过$state.goui-sref更改状态(提供两种方法)将导致刷新父资源。但是,在不更改$stateParams参数的情况下将状态更改为子状态将不会刷新父资源,并且将提供先前返回的值。

答案 1 :(得分:0)

我认为你只是对解决方案缺乏理解,只有当前状态的结果被调用。您只需将解析从父级复制到子级即可。我很确定甚至没有理由在抽象状态上有决心。抽象状态会给你$ stateParams,就是这样。