2017-12-05 1 views
2

Meine Daten sind nach dem Ändern der Route verschwunden.Daten nach dem Ändern der Route gegangen

Szenario:

CommentComponent (Data dargestellt) -> ChangeRoute -> CommentComponent (keine Daten gezeigt)

Die Daten nur beim ersten Last gezeigt, aber dann ist es weg, wenn ich die Route ändern.

fand ich diese Frage mit meinem Fall/Ausgabe ähnlich aussieht: No data for FireStore after use of routerlink

Aber keiner der Kommentare/Antwort ist hilfreich. Also habe ich beschlossen, diese Frage zu stellen.

COMPONENT.HTML: comment.component.html:

<ng-template #noComments> 
    <h1>No comment yet.</h1> 
</ng-template> 
<div *ngIf="comments?.length > 0; else noComments"> 
    <h1 style="margin-bottom: 3.5vh;">Comments</h1> 
    <ul *ngFor="let comment of comments"> 
     <li> 
     <mat-card> 
      <h3>{{comment.name}}</h3> 
      <p>{{comment.comment}}</p> 
     </mat-card> 
     </li> 
    </ul> 
</div> 

COMPONENT.TypeScript: comment.component.ts:

SERVICE: comments.service.ts:

import { Injectable } from '@angular/core'; 
import { Comment } from '../models/comment'; 

import { Observable } from 'rxjs/observable'; 
import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from 'angularfire2/firestore'; 

@Injectable() 
export class CommentService { 

    commentsCollection: AngularFirestoreCollection<Comment>; 
    comments: Observable<Comment[]>; 

    constructor(public afs: AngularFirestore) { 
    this.commentsCollection = this.afs.collection('comments'); 
    this.comments = this.commentsCollection.valueChanges(); 
    } 

    getComments() { 
    return this.comments; 
    } 

} 

MODELL: comments.ts:

export interface Comment { 
    name: string; 
    comment: string; 
} 

[GELÖST]

Hier ist, wie:

In comment.service.ts, tun Sie etwas aus:

constructor(public afs: AngularFirestore) { 
    this.commentsCollection = this.afs.collection('comments'); 
    this.comments = this.commentsCollection.valueChanges(); 
    } 

    getComments() { 
    return this.comments; 
    } 

Um dies:

constructor(public afs: AngularFirestore) { 
    } 

    getComments() { 
    this.commentsCollection = this.afs.collection('comments'); 
    return this.comments = this.commentsCollection.valueChanges(); 
    } 
+0

Sorry nicht wirklich folgen, was meinst du mit Daten gegangen, wenn Sie die Route ändern. Wenn Sie also die Route ändern, wird die Komponente zerstört. Daher sind alle Daten, die sich auf den Komponentenstatus beziehen, nicht mehr vorhanden. Wechseln Sie auf eine völlig andere Route oder wird die Kommentarkomponente noch gerendert? Oder meinst du, du gehst auf eine andere Route und kommst zurück zur Kommentarkomponente? –

+0

@HugoNoro Ja, gehe zu einer anderen Route und dann wieder zurück, um Komponenten zu kommentieren. Daten wurden vorher angezeigt, dann ging ich auf andere Route und wieder zurück auf Kommentarroute, die Daten sind weg. –

+0

Danke, du bist mein Retter. –

Antwort

1

Es scheint mir das Problem In diesem Fall legen Sie zunächst die Kommentare für den Dienstkonstruktor fest Das bedeutet, dass es nur einmal vorkommen wird. Da dies höchstwahrscheinlich ein HTTP-Aufruf ist, wird das Observable sofort nach der Rückkehr abgeschlossen. In der Komponente nach dem Ändern der Route und dem Navigieren zu dieser wiederum wird das Observable nicht neu gestartet. Das Subscription erhält niemals irgendwelche Werte. Das Observable ist bereits abgeschlossen.

Ich glaube, wenn Sie den Code innerhalb des Konstruktors auf die Methode getComments() verschieben, sollte es Ihr Problem beheben.

+0

Lass mich es versuchen. Danke trotzdem. –

+0

GODDAMNIT SIE FIX MEIN PROBLEM DANK! –

+0

Immer froh zu helfen :). Am wichtigsten, hast du verstanden warum? –

Verwandte Themen