如何在Firebase的实时数据库中删除列表中的最后一项?

时间:2019-04-20 12:00:56

标签: javascript firebase firebase-realtime-database

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

这是我的数据库的样子:

Tasks database

这是检索数据的代码:

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);
        }
    });
});

1 个答案:

答案 0 :(得分:0)

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

对于您而言,将密钥与您创建的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();