【问题标题】:Error when working with AngularFireList, data retrieval使用 AngularFireList 时出错,数据检索
【发布时间】:2019-03-30 09:10:00
【问题描述】:

我已成功关注this tutorial 将数据记录到我的 Firebase 数据库。然而,在学习本教程时,我意识到他使用的是“FirebaseListObservable”,现在已更新为“AngularFireList”。我改变了这个,为了让它工作,我必须确保我将我的交易作为一个对象而不是他所做的一个数组。

我的代码:transactionRef$: AngularFireList<transaction>

他的代码:shoppingItemRef$: FirebaseListObservable<ShoppingItem[]>

正如我所说,这修复了我的错误,并且我的数据已正确记录到数据库中。但是,当继续阅读教程并尝试实现数据检索时,我很快收到了这个错误:

错误:InvalidPipeArgument:管道“AsyncPipe”的“[object Object]”

HTML

<ion-content padding>
    <ion-list>
        <ion-item *ngFor="let transaction of transactionRef$ | async">
            <h2>Currency: {{transaction.transactionCurrency}}</h2>
            <h3>Amount: {{transaction.transactionAmount}}</h3>
            <h4>Receiver: {{transaction.transactionReceiver}}</h4>
        </ion-item>
    </ion-list>
</ion-content>

TS

import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';

import { AngularFireDatabase, AngularFireList } from 'angularfire2/database'; 
import { transaction } from '../../models/transaction/transaction.interface';

@Component({
  selector: 'page-view',
  templateUrl: 'view.html',
})
export class ViewPage {

  transactionRef$: AngularFireList<transaction>

  constructor(public navCtrl: NavController,public navParams: NavParams, private database: AngularFireDatabase) {

    this.transactionRef$ = this.database.list('transaction');
  }
}

为了解决这个问题,我更改了这一行:&lt;ion-item *ngFor="let transaction of transactionRef$ | async"&gt;

收件人:&lt;ion-item *ngFor="let transaction of transactionRef$"&gt;

但是,这给了我以下错误:

错误:找不到类型为“object”的不同支持对象“[object Object]”。 NgFor 只支持绑定到 Arrays 等 Iterables。

看了这两个错误,很明显是因为object和array的类型不兼容。但是,我不知道如何解决这个问题。我已经阅读了多篇关于有这两个错误的帖子,但大多数人要么使用 JSON(我不是),要么使用“FirebaseListObservable”,因此可以通过将其从对象更改为数组或省略来修复他们的错误“| aysnc”,这两个都不适合我。

任何帮助将不胜感激。

【问题讨论】:

    标签: database angular firebase ionic3 data-retrieval


    【解决方案1】:

    如果您想从 5.x 以后的 AngularFireList 获取 Observable&lt;Response&gt;,请使用 valueChanges() 函数。

    this.transactionRef$ = this.database.list('transaction').valueChanges();
    

    参考 - https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md#50

    【讨论】:

    • 对不起我的无知。我对使用 Angular 还是很陌生。我错过了什么吗?像导入声明还是?我已经像你说的那样编辑了我的代码,但得到了这个错误:类型'Observable'不可分配给类型'AngularFireList,transaction>'。 'Observable' 类型中缺少属性 'query'。 (属性) ViewPage.transactionRef$: AngularFireList
    • 您是否尝试过使用async
    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多