DataSnapshot class

DataSnapshot 包含来自 Database 位置的数据。

每次从数据库读取数据时,您都会以 DataSnapshot 的形式收到数据。系统会将 DataSnapshot 传递给您使用 on()once() 附加的事件回调。您可以通过调用 val() 方法将快照的内容提取为 JavaScript 对象。或者,您也可以通过调用 child() 返回子快照(随后可对其调用 val()),遍历到该快照。

DataSnapshot 是在 Database 位置高效生成的不可变数据副本。它无法修改,也永远不会改变(若要修改数据,您始终是直接对 Reference 调用 set() 方法)。

签名

export declare class DataSnapshot 

属性

属性 修饰符 类型 说明
key 字符串 |null DataSnapshot 位置的键(路径的最后部分)。数据库位置中的最后一个令牌被视为其键。例如,"ada"是 /users/ada/ 节点的密钥。在任何 DataSnapshot 上访问该密钥都会返回生成该密钥的位置对应的密钥。但是,访问数据库的根网址上的密钥将返回 null
优先级 字符串 |数字 |null 获取此 DataSnapshot 中数据的优先级值。应用不需要使用优先级,但可以按普通属性对集合进行排序(请参阅对数据进行排序和过滤)。
参考 DatabaseReference 此 DataSnapshot 的位置。
size 数字 返回此 DataSnapshot 的子属性的数量。

方法

方法 修饰符 说明
child(path) 获取指定相对路径处位置的另一个 DataSnapshot将相对路径传递给 DataSnapshot 的 child() 方法会返回指定相对路径处位置的另一个 DataSnapshot。相对路径可以是简单的子名称(例如“ada”),也可以是更深层且以斜杠分隔的路径(例如“ada/name/first”)。如果子位置没有任何数据,则返回空的 DataSnapshot(即,值为 nullDataSnapshot)。
exists() 如果此 DataSnapshot 包含任何数据,则返回 true。它的效率略高于使用 snapshot.val() !== null
exportVal() 将 DataSnapshot 的全部内容导出为 JavaScript 对象。exportVal() 方法与 val() 类似,不同之处在于前者包含优先级信息(如果有),因此适合备份您的数据。
foreach(action) 枚举 IteratedDataSnapshot 中的顶级子项。由于 JavaScript 对象的工作方式,val() 返回的 JavaScript 对象中数据的排序不保证与服务器上的排序一致,也无法保证与 onChildAdded() 事件的顺序一致。这正是 forEach() 的用武之地。它可保证 DataSnapshot 的子项将按查询顺序进行迭代。如果未使用显式 orderBy*() 方法,结果将按键排序(除非使用了优先级,在这种情况下,结果会按优先级返回)。
hasChild(path) 如果指定的子路径具有(非 null)数据,则返回 true。
hasChildren() 返回 DataSnapshot 是否具有任何非 null 子属性。您可以使用 hasChildren() 确定 DataSnapshot 是否有任何子属性。如果支持,您可以使用 forEach() 枚举它们。如果没有,则表示此快照包含原始值(可通过 val() 检索)或为空(在这种情况下,val() 将返回 null)。
toJSON() 返回此对象的可序列化 JSON 表示法。
val() DataSnapshot 中提取 JavaScript 值。val() 方法可能会返回标量类型(字符串、数字或布尔值)、数组或对象,具体取决于 DataSnapshot 中的数据。它也可能会返回 null,这表示 DataSnapshot 为空(不包含任何数据)。

DataSnapshot.key

DataSnapshot 所在位置的键(路径的最后部分)。

数据库位置中的最后一个令牌被视为其键。例如,"ada"是 /users/ada/ 节点的密钥。在任何 DataSnapshot 上访问该密钥都会返回生成该密钥的位置对应的密钥。但是,访问数据库的根网址上的密钥将返回 null

签名

get key(): string | null;

数据快照.优先级

获取此 DataSnapshot 中数据的优先级值。

应用不需要使用优先级,但可以按普通属性对集合进行排序(请参阅对数据进行排序和过滤)。

签名

get priority(): string | number | null;

数据快照.ref

此 DataSnapshot 的位置。

签名

readonly ref: DatabaseReference;

DataSnapshot.size

返回此 DataSnapshot 的子属性的数量。

签名

get size(): number;

DataSnapshot.child()

获取指定相对路径中位置的另一个 DataSnapshot

将相对路径传递给 DataSnapshot 的 child() 方法会返回位于指定相对路径下的位置的另一个 DataSnapshot。相对路径可以是简单的子名称(例如“ada”),也可以是更深层且以斜杠分隔的路径(例如“ada/name/first”)。如果子位置没有任何数据,则返回空的 DataSnapshot(即,值为 nullDataSnapshot)。

签名

child(path: string): DataSnapshot;

参数

参数 类型 说明
路径 字符串 子数据位置的相对路径。

返回

DataSnapshot

DataSnapshot.exists()

如果此 DataSnapshot 包含任何数据,则返回 true。它的效率略高于使用 snapshot.val() !== null

签名

exists(): boolean;

返回

布尔值

DataSnapshot.exportVal()

将 DataSnapshot 的全部内容导出为 JavaScript 对象。

exportVal() 方法类似于 val(),不同之处在于它包含优先级信息(如果有),因此适合备份数据。

签名

exportVal(): any;

返回

任意

DataSnapshot 的内容,采用 JavaScript 值的形式(对象、数组、字符串、数字、布尔值或 null)。

调用 DataSnapshot.forEach()

枚举 IteratedDataSnapshot 中的顶级子项。

由于 JavaScript 对象的工作方式,val() 返回的 JavaScript 对象中数据的排序不一定与服务器上的排序一致,也无法保证与 onChildAdded() 事件的顺序一致。这正是 forEach() 的用武之地。它可保证 DataSnapshot 的子项将按其查询顺序进行迭代。

如果未使用显式 orderBy*() 方法,则返回结果按键排序(除非使用了优先级,在这种情况下,结果将按优先级返回)。

签名

forEach(action: (child: IteratedDataSnapshot) => boolean | void): boolean;

参数

参数 类型 说明
操作 (子项:IteratedDataSnapshot)=>布尔值 |无效 将为每个子 DataSnapshot 调用的函数。该回调可以返回 true 来取消进一步的枚举。

返回

布尔值

如果因回调返回 true 而导致枚举取消,则为 true。

DataSnapshot.hasChild()

如果指定的子路径具有(非 null)数据,则返回 true。

签名

hasChild(path: string): boolean;

参数

参数 类型 说明
路径 字符串 潜在子女所在位置的相对路径。

返回

布尔值

如果指定子路径中存在数据,则返回 true;其他 false

DataSnapshot.hasChildren()

返回 DataSnapshot 是否具有任何非 null 子属性。

您可以使用 hasChildren() 确定 DataSnapshot 是否有任何子项。如果支持,您可以使用 forEach() 枚举它们。如果没有,则表示此快照包含原始值(可通过 val() 检索)或为空(在这种情况下,val() 将返回 null)。

签名

hasChildren(): boolean;

返回

布尔值

如果该快照有任何子项,则返回 true;否则设为 false。

DataSnapshot.toJSON()

返回此对象的可序列化 JSON 表示法。

签名

toJSON(): object | null;

返回

对象 |null

DataSnapshot.val()

DataSnapshot 中提取 JavaScript 值。

根据 DataSnapshot 中的数据,val() 方法可能会返回标量类型(字符串、数字或布尔值)、数组或对象。它也可能会返回 null,这表示 DataSnapshot 为空(不包含任何数据)。

签名

val(): any;

返回

任意

DataSnapshot 的内容,采用 JavaScript 值的形式(对象、数组、字符串、数字、布尔值或 null)。