angular - 错误错误 : InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'

标签 angular typescript firebase ionic-framework ionic3

尝试从 firebase 获取用户配置文件数据然后将其显示在主页上时出现异步错误。我尝试删除 home.html 中的异步,这消除了错误,但未显示任何数据。

InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'

home.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, ToastController } from 'ionic-angular';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFireDatabase, FirebaseObjectObservable } from 'angularfire2/database';
import { Profile } from './../../models/profile';


@IonicPage()
@Component({
  selector: 'page-home',
  templateUrl: 'home.html',
})
export class HomePage {

  profileData: FirebaseObjectObservable<Profile>

  constructor(private afAuth: AngularFireAuth, private afDatabase: AngularFireDatabase,
    private toast: ToastController, public navCtrl: NavController, public navParams: NavParams) {
  }

  ionViewWillLoad() {
    this.afAuth.authState.take(1).subscribe(data => {
      if (data && data.email && data.uid) {
        this.profileData = this.afDatabase.object(`profile/${data.uid}`)
      }
      else {
        this.navCtrl.setRoot('LoginPage');
      }
    })
  }
}

home.html

<ion-header>
  <ion-navbar>
    <ion-title>Home</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <p>Username: {{(profileData | async)?.username}} </p>
  <p>Date of Birth: {{(profileData | async)?.birthdate}} </p>
</ion-content>

最佳答案

FirebaseObjectObservable<Profile>不是 async 的类型管道将重新识别。

这里是 AsyncPipe 的源代码链接: https://github.com/angular/angular/blob/5.2.0/packages/common/src/pipes/async_pipe.ts#L43-L145 .

注意第 119 行附近的以下函数:

private _selectStrategy(obj:Observable<any>|Promise<any>|EventEmitter<any>): any {
    if (ɵisPromise(obj)) {
      return _promiseStrategy;
    }

    if (ɵisObservable(obj)) {
      return _observableStrategy;
    }

    throw invalidPipeArgumentError(AsyncPipe, obj);
  }

profileData不是 PromiseObservable , 它正在抛出 invalidPipeArgumentError .您需要将数据转换为标准的 Observable 或 Promise 才能使用 async管道。

您可以使用 .valueChanges() 执行此操作方法(返回 Observable )并更改 profileData 的类型至 Observable .

关于angular - 错误错误 : InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48233671/

相关文章:

javascript - Typescript - 重新排列特定对象

javascript - 使用 Object.values(map) 时,类型 'values' Typescript 上不存在属性 'ObjectConstructor'

javascript - React + TypeScript : 'React' refers to a UMD global but the current file is a module. 考虑改为添加导入。 (理由)

typescript - 如何在 typescript 中声明 map 类型?

ios - 当发送自定义数据时,当后台应用程序对 native ios 使用react时,FCM 无法接收通知

java - 使用Firebase从缓存中获取脱机镜像

javascript - 看不到 router-outlet 是 Angular 组件 - router-outlet 不是已知元素

javascript - 在 Angular-CLI 项目中使用 mdTooltip

javascript - 如何打印具有原始样式的 HTML 元素?

Firebase 远程配置和 Firebase Analytics 可扩展性