AngularFire2 的 database.list 是保存引用还是实际获取数据?

Does AngularFire2's database.list hold a reference or actually grab data?

我在遵循基本的 AngularFire2 docs,一般格式似乎是:

const items = af.database.list('/items');
// to get a key, check the Example app below
items.update('key-of-some-data', { size: newSize });

我的困惑是,在源代码中,调用 database.list() 似乎获取了列出的 url 处的所有数据(第 114 行 here

任何人都可以帮助阐明它是如何工作的吗?如果它确实获取了所有数据,是否有更好的方法在不这样做的情况下获取参考?还是我应该单独引用每个特定的 URL?

谢谢!

当您创建 AngularFire2 list 时,它包含一个内部 Firebase 引用 - 可通过列表的 public $ref 属性.

访问

该列表是一个 Observable - 它用作从数据库读取的接口 - 并包括一些用于写入数据库的附加方法:pushupdateremove.

在你问题的代码中,你只调用了 update 方法,并没有订阅可观察对象,因此没有数据从数据库加载到内存中:

const items = af.database.list('/items');
// to get a key, check the Example app below
items.update('key-of-some-data', { size: newSize });

只有当订阅了 observable 时,valuechild_... 事件的侦听器才会添加到 ref 中,并且列表会构建并维护一个通过 observable 发出的内部数组.所以如果你只是调用写入数据库的方法,它不会加载任何数据。

AngularFire2 object的实现方式类似。