Angular ES6控制器范围

时间:2016-04-09 07:39:13

标签: javascript angularjs ecmascript-6

我想创建一个具有两个API调用结果的对象,并将其绑定到范围。到目前为止我已经

export class MainController {
  constructor ($http) {
    'ngInject';

    this.$http = $http;
    this.getUsers();
    this.getPlayers();
  };

  getUsers() {
    this.$http.get('/api/users').then((resp) => {
      this.users = resp.data;
    })
  };

  getPlayers() {
    this.$http.get('/api/players').then((resp) => {
      this.players = resp.data;
    })
  };

}

我现在可以通过main.playersmain.users访问视图中的用户和玩家。我对范围感到非常困惑。我如何等待两个promises解析然后将变量绑定到范围?

我尝试了$q.all(),但即使我设置self.users

,我也无法访问self.playersvar self = this;

1 个答案:

答案 0 :(得分:1)

您需要做的是在resolve上使用ngRoute在加载路由之前加载用户,或者使用$q.all等待所有内容加载并保持视图呈现:< / p>

export class MainController {
  constructor ($http, $q) {
    'ngInject';

    this.$http = $http;

    this.isDone = false;

    $q.all([this.getUsers(), this.getPlayers()]).then(() => this.isDone = true);
  };

  ...   
}

然后在视图端使用ng-if="myCtrl.isDone"