Angularfire2 - 直接将项目附加到列表

Mar*_*n07 0 json firebase firebase-realtime-database angularfire2

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

Firebase实时数据库内部:

1)初始代码:

  "myList": {
    "0": {
      "key1": "val1"
    },
    "1": {
      "key2": "val2"
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

  "myList": {
    "0": {
      "key1": "val1"
    },
    "1": {
      "key2": "val2"
    },
    "-generatedcode_": {
      "key3": "val3"
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

car*_*ant 6

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

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

push生成一个唯一的密钥,以便多个用户将数据推送到一个位置是安全的.如果这不是一个问题,你想创建一个"2"密钥,你可以这样做,但你不能使用FirebaseListObservable.您可以使用基础Firebase API:

firebase.database().ref("/myList/2").set({ "key3": "val3" });
Run Code Online (Sandbox Code Playgroud)

或者您可以使用AngularFire2 FirebaseObjectObservable:

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

af你的AngularFire实例在哪里

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