Die Frage ist, wie bekomme ich einen Wert von post-Liste post-Detail, um es sofort zu machen reagieren ? Ich nehme an, dass im Nachhinein ein Observable auf Änderungen warten sollte. Ich nehme auch an, dass es eine Eingabeeigenschaft überwachen sollte. Die Frage ist: Kann ich einen Wert von der Post-Liste erhalten und es als eine Eingabe-Eigenschaft an Post-Detail senden? Kann (und sollte) ich es durch die Elternkomponente leiten, oder soll ich einen Dienst dafür definieren?
Diese Situation ist ziemlich einfach - die Post-Liste muss, um anzuzeigen, wenn ein Element ausgewählt ist, und das selectedItem 'passieren Informationen auf das Post-Detail für die Anzeige.
Wenn ich diese Situation behandle, würde ich einfache Eingaben und Ausgaben (d. H. Eigentums- und Ereignisbindungen) verwenden, um die Informationen zwischen den Komponenten zu übergeben, wobei die Elternkomponente als Vermittler der Kommunikation verwendet wird. Sie leiten es durch die Hauptkomponente - im Speziellen zeigt die Post-Liste an, wann ein Post ausgewählt ist und was dieser Post ist, während das Post-Detail einfach anzeigt, welcher Post ihm übergeben wird.
Also, die Post-Liste benötigt eine @Output EventEmitter-Eigenschaft namens itemSelect oder etwas anderes angemessen. Der Zweck dieser Eigenschaft besteht darin, jeden zu benachrichtigen, der sich dafür interessiert, wenn ein Element ausgewählt wird und um welches Element es sich handelt.
PostListComponent:
export class PostDetailComponent {
.....
@Output() postSelect = new EventEmitter();
// whenever a post is selected, you call this.postSelect.emit(selectedPost)
// to notify others which post is selected
Im PostDetailComponent:
export class PostDetailComponent {
.....
// this is your property binding
// used to get data in real time in to the component for display
@Input() post;
Schließlich ist die übergeordnete Komponente einen Beitrag Eigenschaft benötigt, Updates von der Post-Liste zu erhalten und diese Aktualisierungen passieren zu das Post-Detail.
Parent
Die Parent einfach für Updates vom PostList hört, und sie auf Empfang, weist die Substanz des Ereignisses (der $ Ereigniswert in der Vorlage) in seine internen Post Eigenschaft, die wiederum wird an die PostDetails geschoben.
@Component({
.......
template: `
<post-list (postSelect)="post = $event"> </post-list>
<post-detail [post]="post"> </post-detail>
`
})
export class ParentComponent {
post: any; // brokers the communication between the two child components
.......
So würde ich die Situation.
Sie können einen Dienst verwenden, um die Kommunikation zu vermitteln, aber das ist normalerweise nur erforderlich, wenn das Kommunikationsmittel kompliziert ist oder die beiden Komponenten in der Ansichtshierarchie nicht nah beieinander liegen. Daher ist es schwierig, Informationen von einem zu erhalten Komponente zum anderen. Aber in Ihrem Fall kann ein Service übertrieben sein.
See the docs for more info.
da Sie Erwähnen Observable, können wir annehmen, dass dies eine Frage über angular2 ist und nichts mit angularjs zu tun hat? – Claies
https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service – echonax
Ja, Angular 2, genauer Angular 4. Danke für den Link. –