我打算使用ui-routers解析功能将一些可立即解析的 promise 注入(inject)到我的 Controller 中。

我使用示例plnkr进行了示例。
考虑以下嵌套状态:route1route1.list
我有一个在abc上定义的名为route1的解析函数。现在,当我第一次导航到route1时,就会调用abc并将其解决。现在,当我导航至route1.list并返回至route1时,不再再次调用abc

http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview

我想这是故意的,但请考虑以下用例:
resolve函数通过http检索某些数据,并且应该在某些时候(可能在每次状态更改时)刷新/无效。使用嵌套状态时,有什么方法可以做到这一点?
如果在每次注入(inject)时都调用resolve函数,则可以按我想要的任何方式实现它:返回旧的,已解决的Promise或创建一个新的Promise。

我只是对此进行了简短的测试,但是如果状态不是嵌套的,那么一切都会按我的预期进行。但是,由于这种臭味,放弃了嵌套状态。而且,在嵌套状态下提供可解析的依赖项实际上是很好的。

最佳答案

提供选项reload:truego() / transtionTo() / ui-sref可以达到目的:-)
感谢Designing the Code向我指出了这个方向。但是,解决方案有所不同,因此我写下了这个答案。

重新加载为documented as follows:



直接的方法是将每个ui-sref链接更改为如下形式:<a ui-sref="route1" ui-sref-opts="{reload: true}">

为了避免在每个链接上都提供选项,我在$state周围编写了一个装饰器(另请参见http://plnkr.co/edit/mi5H5HKVAO3J6PCfKSW3?p=preview):

 myapp.config(function($provide) {
  $provide.decorator('$state', function($delegate) {
    var originalTransitionTo = $delegate.transitionTo;
    $delegate.transitionTo = function(to, toParams, options) {
      return originalTransitionTo(to, toParams, angular.extend({
        reload: true
      }, options));
    };
    return $delegate;
  });
});

关于angularjs - UI-Router解析功能仅被调用一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22730868/

10-11 12:00