【问题标题】:FireBase - angularfire setting object key as variableFireBase - angularfire 将对象键设置为变量
【发布时间】:2016-03-06 06:05:36
【问题描述】:

我在我的 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 }}}

【问题讨论】:

    标签: javascript angularjs firebase angularfire


    【解决方案1】:

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

    【讨论】:

    • 嗨,大卫,感谢您抽出宝贵时间提供帮助。我正在尝试执行上述操作,但它作为对象插入,而不仅仅是键值对。它像这样插入 members.one.obj { user_name: true } 而不是 members.one { user_name: true } 用户是在点击时生成的(聊天室),这就是为什么需要传递 user_name 和 sender_name
    • 任何需要密钥的地方都可以使用.child(),然后在该路径设置所需的数据。归根结底,一切都只是一个 JSON 对象。我更新了我的答案来代表这一点。
    • 当我使用上述插入时,它会创建以下结构:members: { one: { objectToSave: { "mchen": true } } } 我想要members: { one: { "mchen": true } } 我一直遇到的唯一问题是,当像我的第二个示例一样插入时,我如何传递 user_name以 mchen 的身份出现? - @大卫东
    • 我现在很困惑。在您的第一条评论中,您说不想要members.one { user_name: true },现在您说这就是您想要的。不管你想要什么,它都只是一个键/值存储。使用键名调用 .child(keyName) 会得到你想要的。
    • 对不起,我的问题重新措辞,也许现在更有意义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2022-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2014-08-24
    相关资源
    最近更新 更多