【问题标题】:Using pure Observable vs array (from subscribe)使用纯 Observable vs 数组(来自订阅)
【发布时间】:2017-01-04 03:35:38
【问题描述】:

我想知道关于使用纯 observable 与订阅 observable 并使用数组的最佳实践。

选项 1 - “纯可观察”

this.schools = this.angularFire.database.list('schools') 

然后在 HTML 中使用异步管道(和 rxjs 操作符来处理数据)

选项 2 -“订阅数组”

this.angularFire.database.list('schools').subscribe (response => this.schools=response) 

然后将其视为普通数组。

【问题讨论】:

  • 尽可能在angular2中使用| async,避免手动订阅!

标签: angular firebase firebase-realtime-database rxjs angularfire2


【解决方案1】:

正如 olsn 在 cmets 中指出的那样,使用异步管道来处理这种情况总是更实用。

但是,如果您出于某种原因选择使用手动订阅方法(在将数据显示给用户之前在客户端以某种方式操作数据),您也需要手动取消订阅。

基本上,您需要在组件中编写类似这样的内容:

ngOnInit(){
this.subscription = this.angularFire.database.list('schools').subscribe(response => this.schools=response) 
}

//then somewhere in your code
ngOnDestroy(){
   this.subscription.unsubscribe();
}

为了避免手动取消订阅,如果数据只需要读取一次,您可以使用您可用的运算符之一,例如 take()。

this.angularFire.database.list('schools').take(1).subscribe(response => this.schools=response)

这种方法将确保在查询第一次运行后自动取消订阅 observable。

【讨论】:

  • 嘿,我在 ionic2 论坛上得到了矛盾的答案。你认为这是工作框架的问题吗?我不确定在我的应用程序中实现什么forum.ionicframework.com/t/…
  • 嗯,不使用异步管道的唯一问题是您需要手动维护所有可观察对象的所有状态。 Imo,使用异步管道使一切变得更加实用和干净,尤其是当您在接收数据时不需要过滤或修改任何内容时。但是,如果您需要过滤某些内容,则第二个选项似乎更合适。只需使用对您更有意义的那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2021-12-23
  • 2023-04-02
  • 2018-08-28
相关资源
最近更新 更多