2016-08-09 7 views
0

Ich habe einen TeamController mit einer Initialisierungsfunktion, die die Team-Eigenschaft initialisiert.Kann ich in Miruken ein Versprechen von der Initialisierungsmethode eines Controllers zurückgeben?

Wenn ich das Versprechen von der Initialisierungsfunktion zurückgeben, ist mein Controller in der Ansicht nicht verfügbar, gebunden zu werden.

return TeamFeature(this.context).getTeams().then(teams => { 
    this.teams = teams; 
});  

Ich dachte, ich ein Versprechen aus der Initialisierungsfunktion zurückkehren konnte den Laden zu zwingen, zu warten, bis das Versprechen gelöst wurde?

Antwort

1

Miruken verwendet einen IOC-Container, der Versprechungen vollständig unterstützt. Wenn eine Komponente aus dem Container aufgelöst wird, wird die Initialisierungsfunktion aufgerufen, wenn sie eine Initialisierungsfunktion hat. Wenn die Initialisierungsfunktion eine Zusage zurückgibt, wird eine Zusage vom Container zurückgegeben, der in die angeforderte Komponente aufgelöst wird.

Leider unterstützen Angular und der UI-Router keine asynchrone Komponentenauflösung. Also, die Benutzeroberfläche versucht tatsächlich, an ein Versprechen und nicht an den aufgelösten Controller zu binden. Damit Ihr Code funktioniert, haben Sie 2 Möglichkeiten.

  1. Geben Sie kein Versprechen von der Initialisierungsfunktion zurück, wenn Sie den UI-Router verwenden.

  2. Verwenden Sie die direction von miruken und das ViewRegion-Protokoll, um Ihre Ansicht zu erstellen. Regionen respektieren Versprechungen und warten darauf, die Ansicht zu laden, bis die von der Initialisierung zurückgegebenen Versprechungen behoben sind.