尝试从父级删除单个子项时,我的整个Firebase数据库都被删除了。我的代码没有有效地定位子记录。 [Angular 2 | Google Firebase]
调用删除按钮的HTML部分 此部分循环遍历Firebase数据库中的所有配置文件,并将其打印到屏幕。我放置了一个删除按钮并包含profile.key,以将子配置文件的键值传递给fbRemoveProfile函数。
<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。我的console.logs在按下删除按钮时显示Firebase数据库的所有snapshot.keys。我无法将目标配置文件密钥隔离到控制台。在任何一种情况下,我正在执行一般删除();正在删除数据库的调用。任何建议将不胜感激。
fbRemoveProfile(key){
firebase.database().ref('/').on('child_added', (snapshot) =>{
console.log('Delete button pressed')
console.log(snapshot.key)
snapshot.ref.remove();
});
}
答案 0 :(得分:1)
您的fbRemoveProfile
函数会删除整个数据库,因为ref('/')
上的child_added
event会:
为此位置的每个初始孩子触发一次,并且每次添加新孩子时都会再次触发。
因此,remove
的每个孩子都会调用ref('/')
,删除您的数据库。
相反,你的功能应该是这样的:
fbRemoveProfile(key) {
return firebase.database().ref('profiles').child(key).remove();
}
请注意,child
方法用于获取要删除的子引用。这比构建传递给ref
的路径更安全,因为传递给child
的参数不允许是空字符串。