【问题标题】:Angular 5 - async pipe with firebaseAngular 5 - 带火力的异步管道
【发布时间】:2020-07-20 10:53:30
【问题描述】:

我想将异步管道添加到 Angular Firebase,但我遇到了不知道如何修复的错误:

错误错误: InvalidPipeArgument: '[object Object]' 用于管道 '异步管道'

Firebase NoSQL 数据库:

{
  "boss" : [ null, {
    "isPremium" : true,
    "name" : "John",
    "students" : 10000
  } ],
  "users" : [ null, "user", "user2" ]
}

更新

我已更改组件代码:

user$: AngularFireList<any>;

  constructor(db: AngularFireDatabase) {
    this.user$ = db.list("/users");
  }

html:

<ul>
  <li *ngFor="let user of user$ | async">
    {{ user }}
  </li>
</ul>

我遇到了同样的错误... 在 Angular 版本 4 中它可以工作,但是,如何在 Angular 5.2.0 中修复它??

【问题讨论】:

    标签: html angular


    【解决方案1】:

    async 管道使用 observables 作为参数。该错误清楚地表明user$ 字段不是可观察的。

    也许您想订阅db.object() 的valueChanges() observable?

    看这里:https://github.com/angular/angularfire2/blob/master/docs/rtdb/objects.md

    更新

    AngularFireList&lt;any&gt; 似乎不是 Observable,所以你会收到同样的错误。

    正如我在 angularfire2 的文档中看到的,list() 方法在最新版本中返回一个对象,该对象具有valueChanges() 方法。考虑通过调用valueChanges() 方法并使用异步管道到生成的可观察对象来更改代码。

    更多详情:https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md#50

    【讨论】:

    • 使用 valuchanges 方法有效,但你能告诉我,这个 Observable 类型的 var 使用 valuechanges 方法自动订阅和取消订阅吗?
    • 异步管道自动管理订阅。关于异步管道的官方文档有很好的解释:angular.io/api/common/AsyncPipe
    【解决方案2】:

    您收到该错误是因为,async 管道适用于 Observables,而您返回的数据不适用。

    您可能希望将代码更改为:

    user$: Observable<any[]>;
    
      constructor(db: AngularFireDatabase) {
        this.user$ = db.list("/users").snapshotChanges();
      }
    

    或者这个:

    constructor(db: AngularFireDatabase) {
       this.user$ = db.list("/users").valueChanges();
    }
    

    【讨论】:

    • 我需要类型 AngularFireList 因为在 Observable 上我没有以后的方法,例如:push、remove、udpate。你知道如何解决我以后可以使用这些方法的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2018-07-18
    • 2019-04-07
    • 2019-12-14
    相关资源
    最近更新 更多