尝试删除单个子项时,将删除整个Firebase数据库

时间:2017-01-16 23:09:32

标签: javascript angular firebase firebase-realtime-database

尝试从父级删除单个子项时,我的整个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();
    });
  }

1 个答案:

答案 0 :(得分:1)

您的fbRemoveProfile函数会删除整个数据库,因为ref('/')上的child_added event会:

  

为此位置的每个初始孩子触发一次,并且每次添加新孩子时都会再次触发。

因此,remove的每个孩子都会调用ref('/'),删除您的数据库。

相反,你的功能应该是这样的:

fbRemoveProfile(key) {
  return firebase.database().ref('profiles').child(key).remove();
}

请注意,child方法用于获取要删除的子引用。这比构建传递给ref的路径更安全,因为传递给child的参数不允许是空字符串。