2017-07-26 5 views
0

Post-Komponente abonniert Verhalten Subjekt und erhält eine Subskription von Posts. Das erste Mal funktioniert gut, aber wenn ich auf eine andere Seite gehe und zurückkomme, bekomme ich nur den letzten Wert der Beiträge, aber ich brauche die ganze Liste von Beiträgen wie beim ersten Mal.Das Verhaltensthema gibt nur den letzten Wert für die Routenänderungen aus

Beiträge Service:

public getPosts(): BehaviorSubject<Post> { 

    let postSubject: BehaviorSubject<Post> = new BehaviorSubject<Post>(Post.EMPTY_POST); 

    this.db.list(this.getModelPath()).subscribe((posts: Post[]) => { 

    posts.forEach((result) => { 

     let post: Post = Post.fromObject(result); 
     postSubject.next(post); 

     // code ommited 

     }); 

    return postSubject; 

} 

die abonnierte Komponente: (post Listenkomponente)

public getPosts() { 

this.showLoadingSpinner = true; 

    this._postService.getPosts().subscribe((post: Post) => { 

    if(Post.EMPTY_POST != post) { 

     this.showLoadingSpinner = false; 
     this.posts.push(post); 
    } 
    this.hasPostError = false; 

    }, (error) => { 

     this.loggerService.error(error); 
     this.showLoadingSpinner = false; 
     this.loggerService.log("error occured while getting posts.") 
     this.postErrorMessage = "error occured while getting posts."; 
     this.hasPostError = true; 

    },() => { 

     this.showLoadingSpinner = false; 

     if (!this.posts.length) { 

     this.postErrorMessage = "No posts to show!"; 
     this.hasPostError = true; 

     } 

    }) 

}

Antwort

0

BehaviorSubject speichert neueste emittiert Wert

Try ReplaySubject

zu verwenden
0

Sieht so aus, als müssten Sie next sein - das gesamte Array statt nur eines Elements.

public getPosts(): BehaviorSubject<Post> { 

    let postSubject: BehaviorSubject<Post> = new BehaviorSubject<Post>(Post.EMPTY_POST); 

    this.db.list(this.getModelPath()).subscribe((posts: Post[]) => { 

    this.postSubject.next(posts.map(post => Post.fromObject(post)); 

    return postSubject; 
} 

Dann haben Sie den raubend Code zu ändern, um das letzte Element in der emittierten Arrays zu verwenden, wenn es aussendet, wenn Sie nur ein einziges Element mögen.

Dies gibt Ihnen den letzten Snapshot der Liste beim Laden.

Verwandte Themen