javascript - 如何推送到 Angular 4 中的数组 Observable?接收脚本

标签 javascript angular rxjs observable

我的服务类有一个属性:

articles: Observable<Article[]>;

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

如何手动将新文章推送到这个数组中;一个尚未持久化因此不是 http get 的一部分?

我的场景是,您创建了一篇新文章,在保存之前我希望 Article[] 数组将这个新文章推送到它,以便它显示在我的文章列表中。

此外,此服务在 2 个组件之间共享,如果组件 A 使用 ng OnInit() 消费服务并将结果绑定(bind)到重复部分 *ngFor更新组件 B 的服务数组是否会同时更新组件 A 的 ngFor 部分中的结果?还是我必须手动更新 View ?

非常感谢, 西蒙

最佳答案

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

保持 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')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.js"></script>

关于javascript - 如何推送到 Angular 4 中的数组 Observable?接收脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47424966/

相关文章:

javascript - 使用 JS 为当前用户设置 peoplepicker 默认值

javascript - 内容加载时的 Angular 加载动画

angular - 如何在 Angular 6 中再次触发 HttpGet 请求?

javascript - Ioniq 5 模态路线

javascript - RXJS + Axios 错开网络请求

html - Angular 4 BehaviourSubject 无法正确多播

javascript - 将数据从外部模型绑定(bind)到 angularjs

javascript - 使用多个复选框的数据表数据过滤(服务器端)

javascript - angularjs 不使用 $rootscope 和 $broadcast

angular - 如何检查 RxJS Observable 是否包含 Angular2 中的字符串?