【问题标题】:*ngFor throwing invalid pipe argument AngularFireList*ngFor 抛出无效的管道参数 AngularFireList
【发布时间】:2018-08-28 14:54:55
【问题描述】:

我无法理解为什么我的 *ngFor 向我抛出了一个无效的异步管道参数,没有它我得到一个错误,指出 NgFor 仅支持绑定到可迭代对象,例如数组。我在一个单独的页面上有基本相同的代码,它按预期工作,但由于某种原因,在这个页面上我得到了这些错误。

我知道信息就在那里,因为当我将它记录到控制台时,它会从我的数据库中打印数据。

Employee-Detail.ts 页面 - 在构造函数中接收到的参数是来自我的 firebase 数据引用的项目的快照。

    import { Component } from '@angular/core';
    import { IonicPage, NavController, NavParams } from 'ionic-angular';
    import {Observable} from 'rxjs/Observable';
    import { Profile } from '../../models/profile';
    import { CheckIn } from '../../models/check-in';
    import { CheckOut } from '../../models/check-out';
    import { AngularFireDatabase, AngularFireList } from 
    'angularfire2/database';
    import { CheckInDetailsPage } from '../../pages/check-in-details/check-in-
    details';
    import { CheckOutDetailsPage } from '../../pages/check-out-details/check-
    out-details';


    @IonicPage()
    @Component({
      selector: 'page-employee-detail',
      templateUrl: 'employee-detail.html',
    })
    export class EmployeeDetailPage {

      checkInList: Observable<CheckIn[]>;
      checkOutList: Observable<CheckOut[]>;
      public profile: any;  
      constructor(
         public navCtrl: NavController,
         public navParams: NavParams,
         public database: AngularFireDatabase,
       ) {
             this.profile = this.navParams.data;
             console.log(this.profile.firstName);

             this.checkInList = this.profile.checkInList;
             console.log(this.checkInList);

      }


      checkInDetails() {
        this.navCtrl.push('CheckInDetailsPage');
      }


      checkOutDetails() {
        this.navCtrl.push('CheckOutDetailsPage');
      }

    }

还有我的 employee-detail.html 页面

    <ion-header>
        <ion-navbar>
          <ion-title>Employee Details</ion-title>
        </ion-navbar>
    </ion-header>


    <ion-content padding>
         <h1>
           {{profile.firstName}} {{profile.lastName}}
         </h1>
         <ion-list>
              <ion-item>
                  <p>Email:
                      <strong>{{profile.email}}</strong>
                  </p>

                  <p>Checked In:
                      <strong *ngIf = "profile.checkedIn === true "> Yes 
                      </strong>
                      <strong *ngIf = "profile.checkedIn === false "> No 
                      </strong>
                  </p>      
                  <button ion-button block (click)="checkInDetails()">
                      Check In List
                  </button>

                  <button ion-button block (click)="checkOutDetails()">
                       Check Out List
                  </button>

           </ion-item>

         </ion-list>


        <ion-list>

            <ion-item *ngFor="let checkIn of checkInList">
              <p>Time:
                <strong>
                    {{checkIn.time}}
                </strong> 
              </p>
            </ion-item>
      </ion-list>
    </ion-content>

【问题讨论】:

  • 你能从开发者控制台显示 checkInList 吗?
  • 已添加到帖子中,谢谢提醒我忘记添加了。
  • 你的checkInList 是一个对象,而不是一个数组

标签: angular firebase ionic-framework ionic3 ngfor


【解决方案1】:

问题不在于它是一个对象,而在于它是一个可观察的。除非您订阅它或映射,否则您无法获得它的价值。要解决我的建议:

checkIns: CheckIn[];

constructor () {
    this.checkInList.subscribe(ci => this.checkIns = ci)
}

然后您应该能够按预期遍历 CheckIns。

【讨论】:

  • 我收到一个错误,订阅不是一个函数。我尝试使用 this.checkInList.subscribe(ci =&gt; this.checkIns = ci); 和我的 navparams.data 中的相同但都抛出了相同的错误
  • 你必须从 rxjs 库中导入它。 import { Subscription, Observable } from 'rxjs/Rx'
  • 现在我收到错误 TypeError: Cannot read property 'subscribe' of undefined。我想这是因为 checkIns 数组没有初始化所以我将它设置为 null 但仍然得到同样的错误。
  • 变量设置为this.checkInList = this.profile.checkInList;后订阅了吗
  • this.checkInList = this.profile.checkInList; this.checkInList.subscribe(ci =&gt; this.checkIns = ci);
猜你喜欢
  • 2020-02-22
  • 2020-09-10
  • 2016-06-23
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2019-02-26
  • 2019-01-25
相关资源
最近更新 更多