2016-11-16 1 views
0

Ich habe 18 Direktiven, die alle ein sehr großes Objekt auseinander nehmen, das die Elternkomponente abonniert hat (nicht http). Dulle ich die Eigenschaften zu den verschiedenen Direktiven oder wäre es besser, die Observable zu übergeben und die variierenden Komponenten an die Eigenschaften zu übergeben, die sie benötigen.An welcher Stelle in einer Angular2-Hierarchie für Eltern/Kind-Komponenten sollten Sie eine Observable abonnieren?

Kurz sollte ich:

  1. Pass eine beobachtbare zu angular2 Richtlinien und abonnieren aus der Richtlinie Komponente

  2. in der Mutter abonnieren und die resultierenden Daten von beobachtbaren zu angular2 passieren Richtlinien. (Dies ist, wie ich zur Zeit habe es umgesetzt) ​​

Antwort

2

Mit Angular2 und Komponentenbaumstruktur kommt ein Muster, das Sie verwenden sollen: Dumb und Smart-Komponenten.

  • A Smart- Komponente kann alles, was Sie wollen, registrieren Sie sich und haben einige Logik darin
  • A Dumb Komponente auf der gegenüberliegenden soll zu nur verwendet werden, eine Ansicht anzuzeigen mit einigen Daten

(als Eingang bestanden)

Ein wirklich einfaches Beispiel wäre:

PersonComponent: Eine stumme Komponente sollte eine Person angezeigt werden (sagen wir Namen und Alter)

<div> 
    Hi, my name is {{person.name}} and I'm {{person.age}} years old ! 
    </div> 

PeopleComponent: Eine intelligente Komponente, die ruft PeopleService um eine Benutzerliste zu erhalten. Dann abonnieren Sie die Antwort (die ein Observable ist). Seine Ansicht nach sollte die Liste der Person wie die Anzeige:

<person *ngFor="let p of people" [person]="p"></person> 

Und lassen Sie sagen, dass Sie nicht einmal wirklich brauchen, um Ihre beobachtbare in Ihrer TS-Datei zu abonnieren, dann könnte man verwenden, um das async Rohr aus Angular2 :

<person *ngFor="let p of (people | async)" [person]="p"></person> 

Das Wichtigste ist, dass PersonComponent nicht (weder in der ersten noch der zweiten Lösung) erhalten eine beobachtbare. Es ist nur eine dumme Komponente, die Daten bei Bedarf anzeigen muss (wenn das Observable mindestens eine Antwort vom Server erhält).

Verwandte Themen