Roh*_*lvi 9 javascript angularjs firebase
从Firebase说明:
给定单个关键路径alanisawesome
,updateChildren()
仅在第一个子级别更新数据,并且在第一个子级别之外传递的任何数据都被视为setValue()
操作.多路径行为允许使用更长的路径(如alanisawesome/nickname
)而不覆盖数据.这就是第一个例子与第二个例子不同的原因.
我试图createOrUpdateData(object)
在我的代码中使用单个函数.在更新的情况下,它会正确更新第一级子级,但如果我传递了嵌套对象,则会删除该嵌套对象的所有其他属性.
这是代码:
function saveUserDetails(email,object){
var hashedEmail = Utilities.getHashCode(email);
var userRef = ref.child(hashedEmail);
return $q(function(resolve,reject){
return userRef.update(object, function(error){
if(error){
reject(error);
}else{
resolve("Updated successfully!");
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我通过:
{
name: 'Rohan Dalvi',
externalLinks: {
website: 'mywebsite'
}
}
Run Code Online (Sandbox Code Playgroud)
然后它将删除externalLinks对象中的其他属性.是否有更简洁的方法来避免这种情况?
简而言之,我如何确保仅更新嵌套对象并且不删除数据.
Dav*_*ast 14
您可以使用多路径更新.
var userRef = ref.child(hashedEmail);
var updateObject = {
name: 'Rohan Dalvi',
"externalLinks/website": 'mywebsite'
};
userRef.update(updateObject);
Run Code Online (Sandbox Code Playgroud)
通过使用"externalLinks/website"
对象文字中的语法,它将嵌套路径视为更新,而不是嵌套对象的集合.这样可以防止嵌套数据被删除.
这个问题提供了一个适用于 cloud firestore 的最新解决方案。
可以使用“.”而不是“/”。反而:
var userRef = ref.child(hashedEmail);
var updateObject = {
name: 'Rohan Dalvi',
"externalLinks.website": 'mywebsite'
};
userRef.update(updateObject);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2851 次 |
最近记录: |