FireBase - angularfire设置对象键作为变量

时间:2015-12-02 05:03:10

标签: javascript angularjs firebase angularfire

我在angularjs应用程序中使用firebase(angularfire)来存储和处理我的消息系统,但似乎无法弄清楚如何从firebase文档中复制示例数据

 // room members are easily accessible (or restricted)
      // we also store these by room ID
      "members": {
        // we'll talk about indices like this below
        "one": {
          "mchen": true,
          "hmadi": true
        }
      }

此处members.one包含用户名作为键,我也尝试为我的数据执行此操作,但似乎无法找到解决方案。

我的firebase数据的成员部分是这样的:

members { one: { } }

我在$ scope中设置了两个变量。

user_name = kep; //person chatting with name
sender_name = pek; //current user name

所以我想使用set函数将数据插入members.one或本例members.user_name + ':' + sender_name,但我遇到的问题是如何在不创建父对象的情况下实际插入数据。

ref.child('members').child(user_name + ':' + sender_name).set({
    user_name: true, sender_name: true
 });

当我尝试将user_name和sender_name传递给下面的set()函数时,会出现问题。

members { "kep:pek": { user_name: true, sender_name: true }}

我希望它在哪里:

members { "kep:pek": { kep: true, pek: true }}

如果我将user_name和sender_name放入一个对象然后运行set()函数并传递对象,它将创建以下结构,这不是我想要的:

members { "kep:pek": { newObject: { kep: true, pek: true }}}

1 个答案:

答案 0 :(得分:2)

Firebase团队成员。

Firebase数据库只是一个JSON文档。

因此,我们假设您希望以这种方式构建数据:

{
  "members" : {
    "kep:pek" : {
      "kep" : true,
      "pek" : true
    }
  }
}

使用.child()方法或在JavaScript对象中创建密钥来创建自定义密钥。

JSBin Demo

var rootRef = new Firebase('<my-firebase-app>');
var membersRef = rootRef.child('members');
var user_name = 'kep';
var sender_name = 'pek';
// child object to store custom keys
var objectToSave = {};
// set keys in [] syntax
objectToSave[user_name] = true;
objectToSave[sender_name] = true;
// use .child() with a formatted string to save the object
membersRef.child(user_name + ':' + sender_name).set(objectToSave);