目前我正在使用:
this.af.database.list('users').push(user);
如何使提交的对象的键是自定义的。 因此,我希望能够将此对象的节点设置为已注册用户的相同uid。 我可以访问此ID,我只需要知道如何使自定义用户对象节点不是在推送时自动生成的ID。
谢谢
目前我正在使用:
this.af.database.list('users').push(user);
使用类似下面的方法与Angularfire2一起使用
addCustomKey (key, value) {
const toSend = this.af.database.object(`/users/${key}`);
toSend.set(value);
}
addCustomKey(key, value) {
const users = this.af.database.object('/users');
users.update({ [key]: value });
}
push()
会为您生成一个键。这里有一种替代方法。
相反地,如果您想要设置自定义键来确定自己的键/路径,则必须使用child()
。像这样:
firebase.database.ref().child('/path/with/custom/key/goes/here').set();
在您的情况下,要使用用户的身份验证ID,请按如下方式进行:
export class SomeClass {
uid: string;
constructor(public afDB: AngularFireDatabase, public afAuth: AngularFireAuth) {
// Get User Auth ID
afAuth.authState.subscribe(user => {
this.uid = user.uid;
});
}
//Your method
this.afDB.database.ref().child(`users/${this.uid}/`).set(user);
}
push
命令会添加一个 push key,只需使用 update
方法:
this.yourRef = this.af.database.list('users');
let userId = "UID",
userInfos = { data: "your user datas" };
this.yourRef.update(userId, userInfos);
传入您的自定义密钥,例如projectKey,在这种情况下,projectKey是您从某个地方填充的变量:
private whatEverName(projectKey) {
this.projectKey = projectKey;
this.af.object('/Projects/' + this.projectKey);
}
// Add child node with project key as push key to the association index.
this.af.object(`ProjectsMembers/${projectKey}/` + this.ownerKey)
.set({ ownerName: this.ownerName });
//to generate a key do something like
var id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
function setNode(key){
if (key){
var thisRef = ref.child('testLocation');
var obj = {};
obj[key] = true;
thisRef.update(obj, onComplete);
}
}
我建议这是最简单的方法。
import { Component, OnInit } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
@Component({
selector: 'app-mycomponent',
templateUrl: './mycomponent.page.html',
styleUrls: ['./mycomponent.page.scss'],
})
export class MyComponent implements OnInit {
constructor(
private db: AngularFireDatabase
) { }
ngOnInit() {}
submit(user) {
this.db.database.ref('users').child('your_custom_key').set(user)
}
}
只需使用常规的Firebase方法即可完成,如下所示:
var updates = {};
updates['/users/' + userId] = newUserData;
return firebase.database().ref().update(updates);
你作用域中与列表绑定的任何内容都将反映更新。