如何在Angular 4中推送到Observable of Array?RxJS

sim*_*www 10 javascript observable rxjs angular

我的服务类上有一个属性,如下所示:

articles: Observable<Article[]>;
Run Code Online (Sandbox Code Playgroud)

它由使用标准http.get().map()解决方案的getArticles()函数填充.

如何手动将新文章推送到此数组中; 一个还没有坚持,所以不是http的一部分?

我的方案是,你创建一个新文章,在保存之前我希望Article []数组将这个新文章推送到它,以便它显示在我的文章列表中.

此外,此服务在两个组件之间共享,如果组件A使用ng消耗服务OnInit()并将结果绑定到重复节*ngFor,则将从组件B更新服务数组同时更新组件A的ngFor节中的结果?或者我必须手动更新视图吗?

非常感谢,西蒙

Ric*_*sen 7

正如您在评论中所说,我将使用主题。

保持articles可观察而不是存储为数组的好处是http需要时间,因此您可以订阅并等待结果。另外,这两个组件都可以获得任何更新。

// Mock http
const http = {
  get: (url) => Rx.Observable.of(['article1', 'article2']) 
}

const articles = new Rx.Subject();

const fetch = () => {
  return http.get('myUrl').map(x => x).do(data => articles.next(data))
}

const add = (article) => {
  articles.take(1).subscribe(current => {
    current.push(article);
    articles.next(current);
  })
}

// Subscribe to 
articles.subscribe(console.log)

// Action
fetch().subscribe(
  add('article3')
)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.js"></script>
Run Code Online (Sandbox Code Playgroud)