当我将数据(使用push()方法)插入Firebase时,它将生成一个随机密钥,如图所示。我可以使用随机数(-LExEhDWjwXcj6rGZar9)更新键值(名称和年龄)
现在我要实现的是,我要在不使用**-LExEhDWjwXcj6rGZar9 <的情况下更新键值(名称:“ Manjeshwar”年龄:“ 27”至名称:“ somename”年龄:“ 20”) / strong>随机密钥**。我想动态更新。
答案 0 :(得分:1)
要获取密钥,您必须知道该密钥下的某事。假设您知道用户名,则可以使用该名称查询所有用户并更新它们:
var ref = firebase.database().ref("employees");
ref.orderByChild("name").equalTo("manjeshwar s").once("value", function(snapshot) {
snapshot.forEach(function(employee) {
employee.ref.update({ age: "20" });
});
});
请注意,如果有多个以此名称命名的员工,则将全部更新。
如果员工名称是唯一的,请考虑实际使用这些名称作为每个员工节点的键:
employees
"manjeshwar s": {
...
}
"puf": {
...
}
使用此结构,可以保证员工名称是唯一的。您可以不进行查询就更新它们:
ref.child("manjeshwar s").update({ age: "20" });
答案 1 :(得分:0)
经过大量研究,我得到了自己问题的答案。 答案:要获取密钥,只需在Angular2中使用“ $ key” ,这样您就可以更新要更新的任何随机密钥的值,如下面的代码所示。
Component.html:
<div class="employees" *ngFor="let e of employees | async">
<ul>
<li>Name: {{e.name }}</li>
<li>Age: {{e.age}}</li>
<li>Random Key: {{e.$key }}</li> //outputs random key
<button class="btn btn-primary" (click)="goToDetails(e, '$key')">Edit</button>
</ul>
</div>
//form to update the values
<div id="uform" class="col-md-4" hidden>
<input class="form-control col-md-3" type="text" placeholder="Name" id="uname" name="name">
<input class="form-control col-md-3" type="number" placeholder="Age" id="uage" age = "age">
<button class="btn btn-primary" (click) = update()>Update</button>
</div>
Component.ts:
//Function to get id of form
getInputVal(id){
return (<HTMLInputElement>document.getElementById(id)).value;
}
fbkey:string = ''; //global variable
goToDetails(employees:{},key:string) {
this.fbkey = employees[key];
document.getElementById("uform").style.display = "block";
}
update(){
//Get Values
var name =this.getInputVal('uname');
var age= this.getInputVal('uage');
this.updateF(name, age);
}
updateF(name, age){
this.af.database.object('employees/'+this.fbkey).set({
name: name,
age: age
})
}
因此,使用“ $ key” ,我们可以动态更新该特定键的值。