【问题标题】:Angularfire2 - append item directly to listAngularfire2 - 将项目直接附加到列表
【发布时间】:2016-09-03 09:02:28
【问题描述】:

当我使用 angularfire2 push("number") 进入 firebase 时,数字不会直接附加,而是嵌套在生成的代码中。

Firebase 实时数据库内部:

1) 初始代码:

  "myList": {
    "0": {
      "key1": "val1"
    },
    "1": {
      "key2": "val2"
    }
  }

2).push({"key3": "val3"})之后

  "myList": {
    "0": {
      "key1": "val1"
    },
    "1": {
      "key2": "val2"
    },
    "-generatedcode_": {
      "key3": "val3"
    }
  }

为什么没有直接添加新对象,没有嵌套?

【问题讨论】:

    标签: json firebase firebase-realtime-database angularfire2


    【解决方案1】:

    您所看到的是预期的行为。 AngularFire2 的 FirebaseListObservable 上的 push 函数使用底层 Firebase API 的 push,它会生成一个唯一的、可排序的键:

    push() 生成的唯一键按当前时间排序,因此生成的项目列表将按时间顺序排序。密钥也被设计成不可猜测的(它们包含 72 个随机位的熵)。

    push 生成一个唯一的密钥,以便多个用户将数据推送到一个位置是安全的。如果这不是问题并且您希望创建一个"2" 密钥,您可以这样做,但您不能使用FirebaseListObservable 来创建。您可以使用底层 Firebase API:

    firebase.database().ref("/myList/2").set({ "key3": "val3" });
    

    或者你可以使用 AngularFire2 FirebaseObjectObservable:

    let o = af.database.object("/myList/2");
    o.set({ "key3": "val3" });
    

    af 是您的 AngularFire 实例。

    在执行set 之后,您应该会看到您的FirebaseListObservable 实例已更新以包含新添加的数据。

    【讨论】:

    • 很好地解释了这个问题。您能否还展示如何不生成该推送 ID 并简单地设置子 2 的值?
    • 我已经更新了答案,包括两个使用 "2" 作为键的替代方案。
    • 太棒了。确实:多用户是push() 在许多情况下的首选。
    猜你喜欢
    • 2015-04-16
    • 2011-05-15
    • 2011-10-12
    • 2013-12-24
    • 1970-01-01
    • 2021-08-01
    • 2011-01-31
    • 2021-07-11
    相关资源
    最近更新 更多