Javascript 如何在Firebase web app中插入新的子数据?
我正在构建一个简单的汽车数据库应用程序。当用户添加新车时,它会为库创建以下JSON数据,并带有空白字段:Javascript 如何在Firebase web app中插入新的子数据?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在构建一个简单的汽车数据库应用程序。当用户添加新车时,它会为库创建以下JSON数据,并带有空白字段: { "name": "Cars", "gallery": [{ "img": "http://", "title": "BMW" }, { "img": "http://", "title": "Lexus" }, { "img": "http://", "titl
{
"name": "Cars",
"gallery": [{
"img": "http://",
"title": "BMW"
}, {
"img": "http://",
"title": "Lexus"
}, {
"img": "http://",
"title": "Ferrari"
}],
"pageId": "23",
"storeURL": "/app/cars/gallery"
}
现在我想在应用程序中做的是,如果用户添加了新的画廊图片,它应该在最后一张画廊图片之后添加新的子图片。所以在法拉利之后应该插入一个新的物体。我似乎无法做到这一点,因为每个教程都会导致一个死胡同,而且谷歌官方文档指定set()
将替换所有数据,因此如果使用update()
,它将添加数据,而在这种情况下,它不会添加数据
此代码删除所有数据:
function add(){
var data = [
{
title: 'Mercedes',
img: 'http://'
}
]
var postData = {
pageGallery: data
};
var updates = {};
updates['/app/cars/'] = postData;
firebase.database().ref().update(updates);
console.log('New car added');
}
如果我更改并添加子项:
firebase.database().ref().child('gallery').update(updates);
它不做任何事情来处理数据。你能帮忙吗?请看这篇关于许多人的博文。现在读吧,我在这里等你 欢迎回来。既然您知道了当前方法将导致痛苦的原因,那么让我们看看您应该如何对这些数据进行建模。这篇博文已经向您介绍了推送ID,它是Firebase对类似阵列的集合的大规模可扩展、离线准备的方法 正如我们的解释,您可以通过调用
push()
将项目添加到列表中
因此,如果这创造了一辆汽车:
function addStore(){
var rootRef = firebase.database().ref();
var storesRef = rootRef.child('app/cars');
var newStoreRef = storesRef.push();
newStoreRef.set({
name: "Cars",
"pageId": "23",
"storeURL": "/app/cars/gallery"
});
}
然后,要将图像添加到该商店的图库中,请执行以下操作:
var newCarRef = newStoreRef.child('gallery').push();
newCarRef.set({
title: 'Mercedes',
img: 'http://'
})
这将在库的末尾添加一个新的汽车/图像(如果库还不存在,则创建库)。如果有人需要错误处理:
var rootRef = firebase.database().ref();
var storesRef = rootRef.child('Lorelle/Visitors');
var newStoreRef = storesRef.push();
newStoreRef.set($scope.CarModal,
function(error) {
//NOTE: this completion has a bug, I need to fix.
if (error) {
console.log("Data could not be saved." + error);
Materialize.toast('Error: Failed to Submit' + error, 2000);
} else {
console.log("Data saved successfully.");
Materialize.toast('Data Submitted, Thank You.', 2000);
}
});
}
首先,谢谢你的评论。听到一位真正的谷歌开发者的话,我感到非常谦卑。关于答案,你是正确的;在使用密钥时,我将尝试使用Firebase最佳实践。谢谢(不过,我仍然喜欢数组的老式方法)您可以用JSON对象{name:“Cars”,“pageId:“23”,“storeURL:“/app/Cars/gallery”}替换$scope.CarModal,它将非常有效。纯JS现在很少见。