json - 角度显示嵌套值,同时忽略动态键
问题描述
我正在尝试显示我保存在 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"
}
}
这是我的参加者.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;
});
}
}
最后是我的参加者.html
<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>
我再次尝试在卡片中显示每个用户的值。任何帮助和/或指针将不胜感激。
解决方案
这是我的解决方案: 我使用了 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));
})
})
你将拥有一系列对象......
我希望它对你有帮助。
推荐阅读
- javascript - Knockout components and other viewModels coexistence
- excel - Excel sunburst chart format VBA
- java - JSON到Mule 4中的平面文件?
- emacs - 为什么我可以通过错误设置 org-mode 变量来破坏 spacemacs SPC SPC 领导者?
- android - 在没有参考的情况下改造对列表的访问
- c# - 有效负载包含两个或多个具有相同目标路径“e_sqlite3.dll”的文件
- jquery - 更新失败,数据表中的数据点击保存按钮
- jquery - 如何过滤特定条件,获取所有非空列及其内容然后转置?
- reactjs - 如果我的 Fetch 成功,为什么会触发捕获?
- python - 根据字典更改熊猫数据框值