【问题标题】:Angular ES6 Controller ScopeAngular ES6 控制器范围
【发布时间】:2016-04-09 07:39:12
【问题描述】:

我想用两个 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 访问视图中的用户和玩家。不过,我对范围感到非常困惑。我怎样才能等待两个承诺都解决,然后将变量绑定到范围?

我尝试了$q.all(),但我无法访问self.usersself.players,即使我设置了var self = this;

【问题讨论】:

    标签: javascript angularjs ecmascript-6


    【解决方案1】:

    你需要做的是要么使用ngRoute上的resolve在加载路由之前加载用户,要么使用$q.all等待所有内容加载并保持视图渲染:

    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"

    【讨论】:

    • 在来自$q.all的回调中,如何访问playersusers?我应该能够访问this.playersthis.users 吗?
    • 当然可以。您甚至可以将它们作为另一个参数传递给您的回调 (responses) => { this.isDone = true; console.log(responses) }
    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 2018-05-16
    • 2016-03-29
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多