2016-04-09 19 views
1

Ich möchte ein Objekt mit dem Ergebnis von zwei API-Aufrufe erstellen und binden Sie es an den Bereich. Bisher habe ichAngular ES6 Controller Scope

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; 
    }) 
    }; 

} 

ich jetzt Benutzer und Spieler in der Ansicht zugreifen können durch main.players und main.users tun. Ich bin jedoch sehr verwirrt mit dem Zielfernrohr. Wie kann ich auf beide Versprechungen warten, um eine Variable zu lösen und dann an den Bereich zu binden?

versuchte ich $q.all() aber ich kann nicht self.users oder self.players auch zugreifen, wenn ich var self = this;

Antwort

1

gesetzt, was um Sie tun müssen, um entweder resolve auf ngRoute mit den Benutzern zu laden, bevor die Route oder $q.all geladen verwenden zu warten bis alles Ansicht Rendering geladen halten:

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

    this.$http = $http; 

    this.isDone = false; 

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

    ... 
} 

und dann ng-if="myCtrl.isDone" auf der Sichtseite verwenden.

+0

im Rückruf von '$ q.all', wie kann ich auf' Spieler' und 'Benutzer' zugreifen? Sollte ich auf this.players und this.users zugreifen können? – user2954587

+0

ja natürlich. Sie können sie sogar als weiteres Argument in Ihrem Callback übergeben. '(Antworten) => {this.isDone = true; console.log (Antworten)} ' – smnbbrv

Verwandte Themen