firebase实时数据库使用angularfire 2过滤后更新条目
firebase realtime database to update an entry after filter using angularfire 2
实时数据库中的数据结构如下:
"orders" : {
"-LM5p4tl7Og_PMJOspZ-" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-26954",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
},
"-LM5s1wRCvqWA1vsZONy" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-11423",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
},
"-LM5sOHzjLeqFGFleMxq" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-63772",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
}
}
我在我的 ionic 应用程序中使用 angularfire2 并按以下方式过滤一些订单:
getPendingOrders(dateStr:string){
return new Promise((resolve, reject) =>
{
this.db.list('orders',
ref => ref.orderByChild("order/_date").equalTo(dateStr)
).valueChanges().subscribe(
res => {
resolve(res)
},
err => {
console.log(err)
reject(err)
}
)
})
}
上面的查询给我的响应如下
[{"customer": {}, "order": {}}, {"customer": {}, "order": {}}]
我可以在 UI 中很好地呈现它,我希望最终用户能够更新 属性“_orderStatus”的值。问题是我查询数据的方式丢失了密钥以识别要更新它的特定对象。请指教
好的,不确定这是否有帮助,我认为您已经迁移到使用 AngularFire 5.0。调用 .valueChanges() 将 return 一个没有任何元数据(例如项目键)的 Observable,您需要改用 .snapshotChanges() 调用:
this.db.list(...)
.snapshotChanges()
.map(changes => {
return changes.map(change => ({key: change.payload.key, ...change.payload.val()}));
})
.subscribe(...)
实时数据库中的数据结构如下:
"orders" : {
"-LM5p4tl7Og_PMJOspZ-" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-26954",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
},
"-LM5s1wRCvqWA1vsZONy" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-11423",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
},
"-LM5sOHzjLeqFGFleMxq" : {
"customer" : {
"_name" : "Vik Kumar",
"_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
},
"order" : {
"_orderNumber" : "VikKumar-63772",
"_orderStatus" : "Pending",
"_orderTotal" : 500,
}
}
}
我在我的 ionic 应用程序中使用 angularfire2 并按以下方式过滤一些订单:
getPendingOrders(dateStr:string){
return new Promise((resolve, reject) =>
{
this.db.list('orders',
ref => ref.orderByChild("order/_date").equalTo(dateStr)
).valueChanges().subscribe(
res => {
resolve(res)
},
err => {
console.log(err)
reject(err)
}
)
})
}
上面的查询给我的响应如下
[{"customer": {}, "order": {}}, {"customer": {}, "order": {}}]
我可以在 UI 中很好地呈现它,我希望最终用户能够更新 属性“_orderStatus”的值。问题是我查询数据的方式丢失了密钥以识别要更新它的特定对象。请指教
好的,不确定这是否有帮助,我认为您已经迁移到使用 AngularFire 5.0。调用 .valueChanges() 将 return 一个没有任何元数据(例如项目键)的 Observable,您需要改用 .snapshotChanges() 调用:
this.db.list(...)
.snapshotChanges()
.map(changes => {
return changes.map(change => ({key: change.payload.key, ...change.payload.val()}));
})
.subscribe(...)