代码之家  ›  专栏  ›  技术社区  ›  ishandutta2007

InvalidPipeArgument:“[对象对象]”用于管道“AsyncPipe”

  •  10
  • ishandutta2007  · 技术社区  · 8 年前

    声明如下:

    public currentDBUserBS$: any;
    
    constructor(private afDb: AngularFireDatabase){}
    
    fetchUser(uid){
      this.afDb.object(`users/${uid}`).valueChanges().subscribe((dUser) => {
        if (dUser) {
          this.currentDBUserBS$ = dUser;
        }
      });
    }
    

    现在尝试在模板中使用

    template: `<li *ngIf="(authService.currentDBUserBS$ | async)?.role=='admin'"> Something </li>`
    

    错误堆栈:

    ERROR Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'
        at invalidPipeArgumentError (common.js:4219)
        at AsyncPipe._selectStrategy (common.js:5630)
        at AsyncPipe._subscribe (common.js:5612)
        at AsyncPipe.transform (common.js:5586)
        at Object.View_AppNavigatorComponent_0._co [as updateDirectives] (AppNavigatorComponent.html:40)
        at Object.debugUpdateDirectives [as updateDirectives] (core.js:14339)
        at checkAndUpdateView (core.js:13508)
        at callViewAction (core.js:13858)
        at execComponentViewsAction (core.js:13790)
        at checkAndUpdateView (core.js:13514)
    
    3 回复  |  直到 8 年前
        1
  •  24
  •   tomrcht    8 年前

    你在给予 currentDBUserBS$ 您从Firebase获取的对象,而不是可观察对象。如果你想这样做,你必须删除 | async 在模板中。

    但是,您可以执行以下操作:

    fetchUser(uid){
      this.currentDBUserBS$ = this.afDb.object(`users/${uid}`).valueChanges();
    }
    

    .valueChanges() 提供一个可观察值,并在发出新值或修改现有值时自动更新。

        2
  •  4
  •   pzaenger lio    7 年前

    您必须添加 .valueChanges(); 订阅操作后。要求如下:

     this.courses$=db.list('/courses').valueChanges();
    
        3
  •  2
  •   Mateusz Witkowski    8 年前

    您试图将数组传递给异步管道,而不是可观察的。只需删除异步管道或将observable分配给currentDBUserBS$。