ui-router State Children and Resolvers

时间:2015-11-24 06:00:40

标签: angularjs angular-ui-router angular-ui state

我有一个父抽象状态,它有一个从服务器获取数据的解析器。

然后,根据ui-routers解析器继承的性质,我可以访问子状态控制器中已解析的数据。

....controller('bla', function(resolvedData){....

一切都运行良好,但我正在应用程序中实现一项功能,该功能需要更改部分已解析数据并将其反映在应用程序中。

我假设已解析的数据不是对一个对象的引用,但它是服务返回的正确副本?这意味着,如果在父抽象控制器中我更改了已解析数据的一部分,它将不会反映在子状态中,因为它们将查看数据服务中已解析数据的原始副本。

2 个答案:

答案 0 :(得分:1)

  

我假设已解析的数据不是对一个对象的引用,但它是服务返回的正确副本?

即可。 UI-Router传递返回的内容。如果它是参考,它将由所有消费者共享。

检查代码(根本没有提到克隆 - 只传递已解决的内容) - state.js line 455

 /**

 * ....

 * @param {object=} stateConfig.resolve
 * <a id='resolve'></a>
 *
 * An optional map&lt;string, function&gt; of dependencies which
 *   should be injected into the controller. If any of these dependencies are promises, 
 *   the router will wait for them all to be resolved before the controller is instantiated.
 *   If all the promises are resolved successfully, the $stateChangeSuccess event is fired
 *   and the values of the resolved promises are injected into any controllers that reference them.
 *   If any  of the promises are rejected the $stateChangeError event is fired.

 * ... */

答案 1 :(得分:0)

实际上在测试之后,似乎ui-router解析器确实将已解析数据的更改带到子状态,此外,如果我在兄弟状态下更改已解析数据,则更改将反映在另一个兄弟状态中。

我试图找到ui-router代码中的确切位置。 https://github.com/angular-ui/ui-router/blob/master/src/resolve.js