【问题标题】:How can I delete last item on the list in realtime database in firebase?如何在firebase的实时数据库中删除列表中的最后一项?
【发布时间】:2019-09-10 09:38:19
【问题描述】:

我正在用 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);
        }
    });
});

【问题讨论】:

  • 我理解这个任务,但是你在执行它时遇到了什么问题?
  • 我在官方文档中看到你必须使用删除功能,但我不知道我应该使用什么参考来正确删除任务。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

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

在您的情况下,将密钥与您创建的 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();

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2017-01-14
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多