这是一个小问题,如果需要,我只会重写所有内容,但我想保存自己的工作。
我的结构看起来像users/usernames/<someUN>/
。我查看了Firebase文档,但是我找不到如何在“紧密”版本中更新的示例。树。
现在,如果我想更改<someUN>
,您可以看到问题
this.database.ref('users/usernames/' + this.UN).update({
username: newUsernameVariable
})
我必须重组一个不可变的值并执行类似users/usernames/<userID>/username/<username>
但
uids/<uid>/usernames/<UN>
的树,因此这将是多余的现在,如果你试图将修改提升一个档次:
this.database.ref('users/usernames').update({
this.UN: newUsernameVariable
})
这非常接近我想要的,但遗憾的是JSON无效。左侧未转换为字符串。我试过这个
var UNJSON = JSON.stringify(this.UN);
this.database.ref('users/usernames/').update({
UNJSON: newUsername
});
但它不会起作用,只是将UNJSON视为一个词
编辑:
我已将其更改为
var updates = {};
updates[this.UN] = newUsername;
this.database.ref('users/usernames').update(updates);
哪个几乎有效,但现在替换了子节点!
我已经改变了这个标题的问题,因为基本上我已经达到users/usernames/myawesomeusername/{manychildren}
这样的地步,我想在编辑myawesomeusername时保留孩子们。
编辑2:this.UN在点击更新代码时填充在onAuthStateChanged中。这是this.UN
的设置// UN is a global read/write username string that persists throughout the session.
// SETTING THE VALUE OF this.UN WITH UID
if(this.UN == undefined) {
console.log('this.UN was null. Fetch the real one with UID from the database');
this.database.ref('uids/' + user.uid).once('value', function(snapshot){
this.UN = snapshot.val().username;
console.log('Grabbed from snapshot.username');
if(this.UN == undefined) {
console.log('Impossible error');
}
}.bind(this)).catch(function(err){
console.log('Error obtaining userID from database', err);
this.UN = user.displayName || "User" + user.uid;
}.bind(this));
} else {
console.log(this.UN);
}
我使用this.UN
来处理应用程序其余部分的用户名。