【问题标题】:angular-ui-router resolve is fired but value is not updated when 'beforeEnter'angular-ui-router resolve 被触发,但在“beforeEnter”时值未更新
【发布时间】:2016-09-30 10:42:18
【问题描述】:

我在DoctorHomeCtrl 中注入testResolve, 当它加载时,testResolve 的值是正确的。 转到另一个页面并返回后,该函数被触发,但 testResolve 的值没有更新。

    controller: 'DoctorHomeCtrl',
    resolve:{
      testResolve:function ($q, $timeout) {
        var defer = $q.defer();
        $timeout(function () {
          defer.resolve(new Date());
        }, 100);
        return defer.promise;
      }
    }
.....
.controller('DoctorHomeCtrl', [....,'testResolve',
function (....,testResolve) {
  $scope.$on('$ionicView.beforeEnter', function () {
    console.log('testResolve');
    console.log(testResolve);
  });

【问题讨论】:

  • 如果你在 testResolve() 函数中放置一个 console.log,它会在返回页面时触发吗?
  • 是的,它触发并记录了更新的值。
  • PS:在ngRoute中,完全正确。

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


【解决方案1】:

行为:

...转到另一个页面并返回后,该函数被触发,但 testResolve 的值没有更新...

是正确的。简单地说,Ionic 做了一些自定义的,UI-Router 性能优化......缓存。这意味着,它破坏了预期的 UI-Router 行为.. 因为:

每当 view 初始化,并且其controller 被实例化... resolve 被触发。

但是在这里..我们提供了缓存控制器...没有被重新初始化。

解决方案?也许就像这里讨论的那样

What is the difference between $ionicView.enter and cache:false

避免缓存...或者只是在 onEnter 事件中进行解析...

【讨论】:

  • 谢谢。而且“缓存的控制器也触发解析”对吗?
  • 嗯,缓存的意思是......它已经被启动了。并且只有在初始化(创建)期间才被解析评估,正确地将数据传递给构造函数......所以,缓存永远不会重新触发......希望它有点帮助......祝 UI-Router 和 ionic 好运跨度>
  • 但是resolve在goback时也会被触发。我认为它不应该被触发。
  • 这真的取决于,如果这会触发缓存控制器,或者如果这实际上会破坏旧视图......并创建新视图。另外.. 有一个缓存大小,它会释放较旧的缓存项.. 但一般来说.. 不要在这种情况下使用 Ionic 的解析。它的缓存将是不可预测的......有帮助吗?
  • 知道了。无论如何,我打算只在“加载”中处理数据。感谢 anwser。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 2016-11-14
相关资源
最近更新 更多