首页 > 解决方案 > 如何在firebase的实时数据库中删除列表中的最后一项?

问题描述

我正在用 Javascript 构建简单的待办事项应用程序,并使用 firebase 的实时数据库作为我的数据库来存储每个用户的任务。检索和写入数据工作正常,但是当我想从列表中删除某些内容时,问题就出现了。具体来说,我想在单击按钮时删除最后一项。

这是我的数据库的样子:

任务数据库

这是检索数据的代码:

db.on('child_added', snapshot => {

    let span = document.createElement('span');
    span.setAttribute('class', 'listItem');
    let textNode = document.createTextNode(snapshot.val().name + `\n`);
    span.appendChild(textNode);

    snapshot.forEach(() => {
        if(snapshot.val().uid == user.uid) {
            todoListContent.appendChild(span);
        }
    });
});

标签: javascriptfirebasefirebase-realtime-database

解决方案


要从数据库中删除一个节点,您需要知道该节点的完整路径。这意味着您要么必须存储每个节点的键,要么存储一些允许您查找该键的其他值。

span在您的情况下,通过将密钥与您创建的相关联,存储密钥似乎最简单:

db.on('child_added', snapshot => {

    let span = document.createElement('span');
    span.setAttribute('id', snapshot.key); // store the key for later reference
    span.setAttribute('class', 'listItem');
    let textNode = document.createTextNode(snapshot.val().name + `\n`);
    span.appendChild(textNode);

    snapshot.forEach(() => {
        if(snapshot.val().uid == user.uid) {
            todoListContent.appendChild(span);
        }
    });
});

现在,当用户单击span删除该节点时,您可以从其id属性中获取密钥,然后可以使用以下命令删除该节点:

let key = span.id;
 db.child(key).remove();

推荐阅读