角度显示嵌套值,而忽略动态键

时间:2019-01-29 03:04:18

标签: json angular

我正在尝试显示保存在Firebase数据库中的用户。当我从firebase获得json响应时,它以动态值开始。示例:“ SivqCsErHQZNvGMe7p6r5nGknFy2”。在我的角度应用程序中,我将如何绕过它,而仅在下面显示键/值对。

{
            "SivqCsErHQZNvGMe7p6r5nGknFy2": {
                "attendance": "Not Present",
                "company": "Company",
                "displayName": "Jane Doe",
                "email": "jane@company.com",
                "id": "SivqCsErHQZNvGMe7p6r5nGknFy2",
                "img": "https://img.com",
                "phoneNumber": "3452138765",
                "position": "CTO"
            },
            "zqRvsxf9Z3eCU740vOq4jklBrK92": {
                "attendance": "present",
                "company": "ACME Co.",
                "displayName": " John Doe",
                "email": "john@acmeco.com",
                "id": "zqRvsxf9Z3eCU740vOq4jklBrK92",
                "phoneNumber": "9998887765",
                "position": "CEO"
            }
        }

这是我的attees.ts文件

import { Component } from '@angular/core';
import { ToastController, Refresher } from 'ionic-angular';
import { FirebaseUserData } from '../../providers/firebase-user-data';
import { NavController, NavParams } from 'ionic-angular';

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

  attendees: any = [];

  constructor(
    public navCtrl: NavController, 
    public navParams: NavParams,
    public firebaseuserData: FirebaseUserData,
    public toastCtrl: ToastController,
  ) {}

  ionViewWillEnter() {
    console.log('ionViewDidLoad AttendeesPage');
    this.updateAttendees();
  }

  updateAttendees(){
    this.firebaseuserData.getAttendees().subscribe((attendees) => {
      this.attendees = attendees;
      console.log(attendees)
    });    
  }

  doRefresh(refresher: Refresher) {
      console.log(this.attendees);    
      setTimeout(() => {
        this.updateAttendees();
        refresher.complete();

        const toast = this.toastCtrl.create({
          message: 'Attendees list has been updated.',
          duration: 3000
        });
        toast.present();
      }, 1000);
  }  
}

这是我的提供商文件:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class FirebaseUserData {
    data: any;

    constructor(
        private http: HttpClient
    ) {}

    load(): any {
        let timeStamp = +new Date();
        return this.http.get('https://url.firebaseio.com/users.json?tsp=' + timeStamp,);  
    }    

    getAttendees() {
        return this.load().map((data: any) => {
            return data;
        });
    }

}

最后这是我的与会者。

<ion-card *ngFor="let attendee of attendees">

  <ion-item>
    <ion-avatar item-start *ngIf="attendee.img; else defcon">
      <img src="{{attendee[0].img}}">
    </ion-avatar>
    <ng-template #defcon>
      <ion-avatar item-start>
        <img src="assets/img/icon-1024.png">
      </ion-avatar>
    </ng-template>
    <h2>{{attendee.displayName}}</h2>
    <p>{{attendee.company}}</p>
  </ion-item>

  <ion-card-content>
    <p>Attendance Type: {{attendee.attendance}}</p>
    <p>Position: {{attendee.position}}</p>
    <p>Position: {{attendee.email}}</p>
    <p>Position: {{attendee.phoneNumber}}</p>
  </ion-card-content>

</ion-card>

我再次尝试显示卡中每个用户的值。 任何帮助和/或指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是我的解决方案: 我使用了angular-fire2

首先,我导入了必需的提供程序:

import { AngularFireList, AngularFireObject, AngularFireDatabase } from 'angularfire2/database';

在构造函数中声明

  constructor(private afDB: AngularFireDatabase) { }

之后,我创建了一个泛型函数(它接收文档名称)以返回我的所有列表:

public getListAll = (doc: string): AngularFireList<T> => {
return this.afDB.list(doc);}

要使用此功能:

getListAll('news').snapshotChanges()
  .subscribe(items => {
    this.newsList = [];
    items.forEach( i => {
      const _new = i.payload.toJSON();
      _new['$key'] = i.key;
      this.newsList.unshift(<News>(_new));
    })
  })

您将拥有和对象数组...

希望对您有帮助。

相关问题