使用 Firebase 和 Angular 5,我使用快照方法检索数据而不监听更改。我想保留每个项目的索引/键,因为它用于链接以导航到所单击项目的页面。
这是TS:
features = [];
notfeatures = [];
constructor(private Svc: Service, private http: HttpClient){
firebase.database().ref('/reviews').once('value').then((snapshot)=> {
console.log("snapshot", (snapshot.val()));
..........
记录 (snapshot.val())
给我一个对象(我无法迭代):
-L6ZwjBbyi4jz21OEoST: {category: "Movies", contributor: "CF1", feature: "No", …}
randomkey1: {category: "Movies", contributor: "CF1", feature: "No", …}
randomkey2: {category: "Movies", contributor: "DS1", feature: "Yes", …}
randomkey3: {category: "TV", contributor: "KH1", feature: "No", …}
所以,我使用 forEach
一个一个地获取所有项目,并在满足条件时将它们推送到两个不同的数组。
..........
snapshot.forEach(snapshot => {
console.log(snapshot.key, snapshot.val());
if (snapshot.val().feature == "Yes") {
this.features.push(snapshot.val())
console.log("feature", this.features)
}
if (snapshot.val().feature == "No") {
this.notfeatures.push(snapshot.val())
console.log("notfeature", this.notfeatures)
}
});
})
}
但是,这样做意味着我丢失了导航所需的 snapshot.key
。
如何保留每个项目的 snapshot.key
用于导航/数据目的?
最佳答案
首先,不能遍历 snapshot.val()
返回的对象是不正确的。你当然可以 iterate over the key/value pairs in a javascript object使用 for (x in y)
语法。
但是如果您想在保留唯一键的同时遍历快照中的子对象,您可以将该值放入子对象中:
const val = snapshot.val()
val.id = snapshot.key
this.features.push(val)
现在您有一个快照对象,该对象具有名为 id
的新属性,其中包含唯一键。
关于javascript - Firebase 快照返回对象而不是数组来迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121302/