猿问

重置 ReplaySubject 值

我有这样的文件结构:

  • 门面.ts

  • 状态.ts

  • 组件.ts

facade我有:

...

getArticles(): Observable<Article> {

  return this.articleService.fetchAll();

}

...

在state我有:


...

triggerArticlesFetch$ = new ReplaySubject<void>(1);


articles$ = this.triggerArticlesFetch$.pipe(

  switchMap(() => this.fc.getArticles()),

  shareReplay(1)

);


loadArticles(): void {

  this.triggerArticlesFetch$.next();

}


getArticles(): Observable<ArticleShare[]> {

  return this.articles$;

}

...

最后component我有:


...

`

  <span> {{ articles$ | async | json }} </span>

`

...

...

articles$: Observable<Article> = this.st.getArticles();


ngOnInit() {

  this.st.loadArticles();

}

...

但是我在“使”此数据“无效”方面遇到了一些问题(组件是可重用的 - 并且状态包含以前的数据)。


[]/null articles$每次调用时清除/重置(可能在状态文件中)的最佳方法是什么loadArticles()?


慕森王
浏览 114回答 1
1回答

有只小跳蛙

从我的评论(据我了解)展开,每次初始化组件时,可观察对象都应以[](or ) 开头。null我能想到的最快解决方法是将 a 管道输入startWith到源代码中。尝试以下状态...triggerArticlesFetch$ = new ReplaySubject<void>(1);articles$ = this.triggerArticlesFetch$.pipe(&nbsp; switchMap(() =>&nbsp;&nbsp; &nbsp; this.fc.getArticles().pipe(&nbsp; &nbsp; &nbsp; startWith([]) // or `null` as per requirement&nbsp; &nbsp; )&nbsp; ),&nbsp; shareReplay(1));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答