0

Ich möchte Kommentare von RealTime Database erhalten. Ich habe die Aufgabe erledigt, aber Objekte werden erst nach der Rückkehr zur Seite angezeigt (nicht aktualisiert).Holen Sie Objekte mit Verweis in Funktion Desynchronisation

Standard angularfire2 Konstruktor innerhalb blog.service.ts

constructor(public afDb: AngularFireDatabase) {} 

Meine Funktion Kommentare, um aus der DB. Dies ist nur eine von vielen Funktionen, ich habe keine Ahnung, wie man Referenz oder Objekte in einer Prozedur bekommt, und ich habe eine Funktion wie diese entwickelt.

getComments(blogTitle: string) { 
    const blogsRef = this.afDb.database.ref('blog-pl'); 
    let commentsRef = null; 
    blogsRef.orderByChild('title').equalTo(blogTitle).on("child_added", function (snapshot) { 
     if (snapshot.hasChild('comments')) { 
     commentsRef = snapshot.child('comments').ref; 
     } 
    }); 
    return this.afDb.list<Comment>(commentsRef, ref => 
     ref.orderByChild('timestamp') 
    ).valueChanges(); 
    } 

Natürlich möchte ich Observable Comment erhalten [], aber stattdessen bekomme ich null. Das Problem ist, dass commentsRef in

this.afDb.list<Comment>(commentsRef,... 

erhalten kann nicht, bevor es Werte zurückgibt. Ich habe versucht, es innerhalb der Funktion zurückzugeben, wo ich einen Verweis auf commentsRef zuweisen. Aber es ruft Fehler: (56, 9) TS2347: Untyped Funktionsaufrufe möglicherweise Typ Argumente nicht akzeptieren. Was ich nicht lösen kann.

versuchen, es in comments.component.ts zu bekommen

public currentComments: Observable<Comment[]>; 

constructor(private blogService: BlogService, private authServicec: AuthService) {} 

ngOnInit(): void { 
    this.currentComments = this.blogService.getComments(this.blogTitle); 
    this.currentComments.subscribe(val => { 
     if (val.length != 0) { 
     this.areAnyComms = true; 
     }}) 
    } 

es in html Anzeige

<ul *ngFor="let curUserReview of (currentUsersReviews | async)?.slice().reverse()"> 

Warten auf Ihre Ratschläge und vielen Dank für Ihre Antworten verwenden.

Antwort

0

Sie sollten es in Ihre erste erhalten, da Daten asynchron kommt. Versuchen Sie

getComments(blogTitle: string) { 
const blogsRef = this.afDb.database.ref('blog-pl'); 
let commentsRef = null; 
return blogsRef.orderByChild('title').equalTo(blogTitle).on("child_added", function (snapshot) { 
    if (snapshot.hasChild('comments')) { 
    commentsRef = snapshot.child('comments').ref; 
    return this.afDb.list<Comment>(commentsRef, ref => 
     ref.orderByChild('timestamp') 
    ).valueChanges(); 
    } 
}); 
} 
+0

Wie ich schon sagte, es TS2347: Untyped Funktionsaufrufe möglicherweise Typ Argumente Fehler nicht akzeptieren. – ImmoXZ

+0

versuchen, Typ zu Ihrer Funktion hinzufügen 'getComments (blogTitle: string): Observable {...} '. – Hareesh

+0

funktioniert leider immer noch nicht (falsche Arten von Objekten). Gibt es noch eine andere Möglichkeit, diese Objekte zu bekommen? – ImmoXZ

Verwandte Themen