ui-router:状态更改时不调用Parent的解析

时间:2015-08-29 08:14:04

标签: javascript angularjs angular-ui-router

在ui-router中,当一个状态发生变化时,它应该调用它的所有父分析。这是第一次状态改变时的工作原理。但是对于第二时间,不会调用父级的结果(可能因为它们之前已经解决过了)。

这是状态配置

var app = angular.module('plunker', ['ui.router']);

app.config(function($stateProvider) {
  $stateProvider
  .state('root', {
    abstract: true,
    resolve: {
      preloadData: function() {
        console.log("preloadData");
        return true;
      }
    }
  })
  .state('root.home', {
    resolve: {
      test: function() {
        console.log('Home')
        return true;
      }
    }
  })
  .state('root.login', {
    resolve: {
      test: function() {
        console.log('Login')
        return true;
      }
    }
  });
});

这是plnkr http://plnkr.co/edit/rMVbxErZyStt97JifJlj。打开开发控制台,然后单击按钮。您会看到preloadData仅在状态第一次更改时被调用。对于未来的状态更改,不会调用它。

这种行为是/正常吗?有没有办法在每次状态变化时强制调用父母的决议?

1 个答案:

答案 0 :(得分:4)

"解决"当你从一个"局外人那里去那个州(或其中一个后代)时,一个特定国家的运行" state - 即所讨论状态的层次树之外的状态。然后,它的后代和它自己之间的导航不会重新运行"解决"和控制器。

换句话说,给出以下状态层次结构示例:

     A     B
    /     /
   AA    C
        / \
       C1 C2

然后,从A切换到B将运行B的控制器并且"解析",因为A在B树之外。然后切换到C(或C1或C2),然后再切换回B,不会重新运行B'

如果你然后切换回A(或AA),那么A将会结算。