AngularFire2如何使用自己的自定义键而不是自动生成的键

时间:2016-11-10 09:53:36

标签: angular firebase angularfire2

目前我正在使用:

this.af.database.list('users').push(user);

如何使提交的对象的密钥自定义。 所以我希望能够将此对象的节点设置为注册用户的同一个uid。我有权访问此ID我只需要知道如何在推送时使自定义用户对象节点不是自动生成的ID。

由于

7 个答案:

答案 0 :(得分:9)

使用与Angularfire2

类似的方法
addCustomKey (key, value) {
    const toSend = this.af.database.object(`/users/${key}`);
    toSend.set(value);
}

答案 1 :(得分:5)

这是您可以使用AngularFire2的另一种方法

addCustomKey(key, value) {
    const users = this.af.database.object('/users');
    users.update({ [key]: value });
}

答案 2 :(得分:2)

push会添加推送键,只需使用update方法:

this.yourRef = this.af.database.list('users');
let userId = "UID", 
userInfos = { data: "your user datas" };

this.yourRef.update(userId, userInfos);

答案 3 :(得分:1)

vanilla js看起来像这样:

//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);
  }
}

答案 4 :(得分:1)

传入您的自定义键,在本例中为projectKey,它是您从某处填充的变量:

private whatEverName(projectKey) {
    this.projectKey = projectKey;
    this.af.object('/Projects/' + this.projectKey);
}

在某处调用代码中的whatEverName(projectKey)并获得自定义节点密钥。此建议截至2017年7月25日为止。

我在此处添加了一些内容,以帮助那些尝试使用另一个按键作为自定义键创建上述子节点的人。这对于该项目下的关联索引很有用,例如处理该项目的用户列表。您可能不希望在项目数据中使用此列表,但可以通过查询获取该列表。这样可以更容易地对数据进行非规范化,并具有更平坦的体系结构,即Firebase的目标。

在这种情况下,该关联节点称为ProjectsMembers,我们正在其中记录项目的所有者。以相同的方式添加其他用户节点。注意反引号!!! 单引号不起作用。在这种情况下,我将所有者名称设置为push键的引用。更容易在数据库中阅读。

// Add child node with project key as push key to the association index.
this.af.object(`ProjectsMembers/${projectKey}/` + this.ownerKey)
   .set({ ownerName: this.ownerName });

答案 5 :(得分:1)

正如上面的许多答案中所提到的,调用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);
}

答案 6 :(得分:0)

只需使用常规的firebase方法:

library(latex2exp)
library(ggplot2)

qplot(1, "A")+
     ylab(TeX("Formula: $\\frac{2hc^2}{\\lambda^\\beta}$"))+
     xlab(TeX("$\\alpha$"))

您的范围内绑定到列表的任何内容都将反映更新。

Read and Write Data on the Web