Javascript 尝试删除单个子级时,会删除整个Firebase数据库
尝试从父级删除单个子级时,我的整个Firebase数据库将被删除。我的代码没有有效地针对子记录。[角度2 |谷歌Firebase] 调用删除按钮的HTML部分 本节循环浏览Firebase数据库中的所有配置文件,并将其打印到屏幕上。我放置了一个删除按钮并包含profile.key,以将子配置文件的键值传递给fbRemoveProfile函数Javascript 尝试删除单个子级时,会删除整个Firebase数据库,javascript,angular,firebase,firebase-realtime-database,Javascript,Angular,Firebase,Firebase Realtime Database,尝试从父级删除单个子级时,我的整个Firebase数据库将被删除。我的代码没有有效地针对子记录。[角度2 |谷歌Firebase] 调用删除按钮的HTML部分 本节循环浏览Firebase数据库中的所有配置文件,并将其打印到屏幕上。我放置了一个删除按钮并包含profile.key,以将子配置文件的键值传递给fbRemoveProfile函数 <ul id="profile-listing"> <li *ngFor="let profile of profiles">
<ul id="profile-listing">
<li *ngFor="let profile of profiles">
<div class="single-profile" style="text-align: center">
<p>First: {{profile.firstname}}<br>
Last: {{profile.lastname}}<br>
Email: {{profile.email}}<br>
Phone: {{profile.phone}}<br>
Industry: {{profile.industry}}</p>
<input type="button" value="Delete" class="btn btn-xs btn-danger" (click)="fbRemoveProfile(profile.key)">
<hr>
</div>
</li>
</ul>
您的
fbRemoveProfile
函数将删除整个数据库,因为onref('/')
将:
对于此位置的每个初始子项,将触发一次,并且每次添加新的子项时都将再次触发
因此,对ref('/')
的每个子级调用remove
,删除您的数据库
相反,您的函数应该是这样的:
fbRemoveProfile(key) {
return firebase.database().ref('profiles').child(key).remove();
}
请注意,
child
方法用于获取要删除的child ref。这比构建要传递给ref
的路径更安全,因为传递给child
的参数不允许为空字符串。我尝试了您的建议,但它仍在删除数据库中的所有条目。我移动了数据库的分支,以便post profile函数转到“firebase.database().ref('/profiles')。我修改了fbRemoveProfile(key)函数以匹配此目标ref,但它仍在删除该分支上的所有记录。我认为循环*ngFor=“let profile of profiles”中的键值存储一定有问题,我在循环中调用fbRemoveProfile(profile.key),当我调用控制台日志时,我会转储所有的值,就好像多次调用该方法一样。我已经更新了答案。听起来你是对的,关于:profile.key
。从您的问题来看,该属性中存储的确切内容并不明显,但如果它是profiles
下的密钥名称,则使用child
方法获取要删除的引用会更安全。我尝试了更新的“…les).child(key).remove()”但webapp出现以下错误:error_handler.js:50异常:./AdminProfilelistComponent类AdminProfilelistComponent-内联模板中的错误:19:12原因:Firebase.child失败:第一个参数是无效路径:“未定义”。路径必须是非空字符串,并且不能包含“.”、“$”、“[”或“]”。我将继续进行故障排除,并寻找其他方法来隔离通过ngFor循环传递的密钥。密钥就在那里,只是没有单独提取。根据本文,似乎有什么东西在阻止隔离“gFor将迭代密钥,将重复的模板绑定到数组中的当前密钥。”如果密钥无效,它应该会爆炸,这是个好消息。比移除所有东西要好得多!
fbRemoveProfile(key) {
return firebase.database().ref('profiles').child(key).remove();
}