2016-04-22 3 views
1

Ich versuche, Daten über HTTP GET in einer Komponente zu laden, und dann muss ich diese Daten in Child-Komponente, die dynamisch geladen.Angular2 Dynamic Component Loader mit HTTP-Abfrage

Hier ist der Code:

ngOnInit(){ 
this.accountService.getPersonalInfo().subscribe(
     response => { 
      this.Account = response.json(); 

      this.dcl.loadIntoLocation(HeaderComponent, this.elementRef, 'header') 
       .then(compRef => { 
         compRef.instance.Account=this.Account; 
        } 
       ); 
     } 
     ); 
} 

In Kind Komponente (HeaderComponent) Ich kann this.Account verwenden diese Daten zu erhalten. Gibt es einen besseren Weg, dies zu tun?

Antwort

1

Sie können nur in einem Vorfahren Komponente liefern

@Component({ 
    selector: 'header-cmp', 
    ... 
}) 
class HeaderCmp { 
    constructor(private account:AccountService) { 
    this.account.someObservable.subscribe(...); // or whatever 
    } 
} 

@Component({ 
    selector: 'parent-cmp', 
    providers: [AccountService], 
    ... 
}) 
class ParentCmp { 
    constructor(private account:AccountService) { 
    // set some values 
    } 
} 

Die Komponente, wo Sie den „Service“ zur Verfügung stellen kann die Komponente sein, wo this.dcl.loadIntoLocation(...) tatsächlich ausgeführt wird oder eine andere Vorfahren Komponente weiter oben in der Kette.

+0

Aber dann wird es zwei ähnliche http-Abfragen - eine in der Elternkomponente und andere in dem Kind, richtig? Ich muss die Daten (this.Account) in beiden Komponenten verwenden –

+1

Angulars DI verwaltet eine einzelne Instanz pro Anbieter. Die 'ParentCmp' ruft die Instanz des Providers auf. Für die 'HeaderCmp' wird DI nach oben schauen, bis es einen Provider für' AccountService' findet. Wenn Sie es nicht irgendwo dazwischen einfügen (nur anwendbar, wenn 'ParentCmp' und' HeaderCmp' nicht in einer direkten Eltern-Kind-Beziehung sind), dann wird DI den Provider von 'ParentCmp' finden und ihn auch an 'HeaderCmp' übergeben . Auf diese Weise erhalten beide Komponenten eine Referenz auf die gleiche 'AccountService'-Instanz. –