我正在从firebase检索数据并将其存储到列表项中。但我想改变顺序,这将在高层带来新的职位。我应该添加什么才能使它以这种方式工作?Js我的代码报价
这是我检索数据的功能
const dbRef = firebase.database().ref();
const usersRef = dbRef.child('users');
readUserData();
// READ
function readUserData() {
const userListUI = document.getElementById("user-list");
usersRef.on("value", snap => {
userListUI.innerHTML = ""
snap.forEach(childSnap => {
let key = childSnap.key,
value = childSnap.val()
let $li = document.createElement("li");
// edit icon
let editIconUI = document.createElement("span");
editIconUI.class = "edit-user";
editIconUI.innerHTML = " ✎";
editIconUI.setAttribute("userid", key);
editIconUI.addEventListener("click", editButtonClicked)
// delete icon
let deleteIconUI = document.createElement("span");
deleteIconUI.class = "delete-user";
deleteIconUI.innerHTML = " ☓";
deleteIconUI.setAttribute("userid", key);
deleteIconUI.addEventListener("click", deleteButtonClicked)
$li.innerHTML = value.name;
$li.append(editIconUI);
$li.append(deleteIconUI);
$li.setAttribute("user-key", key);
$li.addEventListener("click", userClicked)
userListUI.append($li);
});
})
}
虽然Firebase提供了确定节点返回顺序的操作,但没有按降序返回节点的操作。
有两种常见的解决方法:
- 在数据中包含一个倒置的时间戳,并对其进行排序
- 在客户端反转结果
在您的情况下,最简单的方法是执行后者:因为您可以将每条消息预挂起到列表中,而不是附加它:
userListUI.prepend($li);
使用实时数据库对数据进行排序有三种方法。
- orderByChild((将根据指定子键或嵌套子路径的值对结果进行排序
- orderByKey((将按子键对结果进行排序
- orderByValue((将按子值对结果进行排序
点击此处了解更多