javascript - 如何在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);
}
});
});
解决方案
要从数据库中删除一个节点,您需要知道该节点的完整路径。这意味着您要么必须存储每个节点的键,要么存储一些允许您查找该键的其他值。
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();
推荐阅读
- django - 在视图中请求会话变量时未保存 GET 请求 - Django
- javascript - 如何防止 JS 中出现“无法解构...”错误?
- html - 如何提供一个简单的静态 html 页面并使用提供的位置哈希
- excel - 无法在自定义文件夹中保存和关闭新创建的工作簿
- c++ - 在类中动态分配二维数组时不断获取“cygwin_exception::open_stackdumpfile”
- angular-material - Angular Material Table:如何突出显示正在排序的列?
- javascript - 无法使用 JwtSecurityTokenHandler().ValidateToken() 读取 CyrptoJS 生成的 JWT
- airflow - Airflow 中的多个 BashOperator 无法识别当前文件夹
- php - PHP mysql数据库两个请求同时在同一张表上
- mocha.js - afterEach 顶层描述