2017-06-14 6 views
1

posts.component.ts - dies im Router Auslass im AppComponentAngular 4: Wie Wert von Array aktualisieren in einer anderen Komponente von einer anderen Komponente

PostsComponent { 
    posts: any = [ 
      { 
       'id': 1, 
       'comment': 'Blah blah blah', 
       'is_liked': false, 
       'like_count' = 24, 
      }, 
      { 
       'id': 2, 
       'comment': 'Yeah yeah yeah!', 
       'is_liked': false, 
       'like_count' = 24, 
      } 
     ] 
} 

Pfosten-controls.component.ts geladen wird - Diese ist das Kind der FooterComponent

PostControlsComponent { 
    likePost('post_id'){ 
     //What do I do here 
    } 
} 

Wenn ich diese Methode likePost (1) ausführen; Wie aktualisiere ich 'is_liked' auf 'true' und inkrementiere 'like_count' um 1 in der PostsComponent?

+0

Was bedeutet die HTML-Vorlage des PostsComponent aussehen? Können Sie die gesamten TypeScript-Dateien für die PostControlsComponent und die PostsComponent anzeigen, einschließlich der @ Component-Annotationen? –

Antwort

4

können Sie die Output Dekorateur aus @angular/core in Ihrem PostConrtolsComponent verwenden ein Ereignis an die übergeordneten Komponente zu emittieren, wie:

@Output() 
public onPostLiked = new EventEmitter<string>(); 
... 
public likePost(postId: string) { 
    this.onPostLiked.emit(postId); 
} 

Und eine onPostLiked Methode implementieren, Rechenblatt mit postId die Gleichen von der Post aktualisiert.

public onPostLiked(postId: string) { 
    let postToModify = this.posts.find(post => post.id === postId); 
    if(postToModify) { 
    postToModify.is_liked = true; 
    postToModify.like_count += 1; 
    // send some post request to backend to inform abount post count updated 
    } 
} 

(. OT: mit Kamel-Fall (zB like_count => likeCount) für Ihre Objektattribute betrachten)

Und für Ihre html etwas wie folgt aus:

<post-controls (onPostLiked)="onPostLiked($event)"></post-controls> 

Für weitere Informationen Komponenteninteraktion können Sie dies lesen: https://angular.io/guide/component-interaction

Und auch sollten Sie über die Verwendung eines Redux-Ansatz über @ngrx denken um den Anwendungsstatus an einem Ort zu halten (es ist einfacher zu debuggen und Sie können einfach die onPush ChangeDetectionStrategy verwenden).

https://medium.com/front-end-hacking/managing-state-in-angular-apps-with-ngrx-store-and-ngrx-effects-part-1-a878addba622

+0

PostsComponent und PostsControlComponent sind keine übergeordneten untergeordneten Komponenten. Sollte das noch funktionieren? –

+0

Wenn sie kein Elternteil sind, können Sie das Ereignis mit der gleichen Methode in der Baumstruktur weiterleiten, oder Sie verwenden einen Dienst, der die Methode mit dem Beitrag mit der ID 'postId' hat. – cyrix

+0

Für den Dienst schauen Sie hier: https://angular.io/tutorial/toh-pt4 und lesen Sie den ersten Link von meiner Antwort (Abschnitt: 'Eltern und Kinder kommunizieren über einen Dienst') – cyrix

Verwandte Themen