Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试删除单个子级时,会删除整个Firebase数据库_Javascript_Angular_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 尝试删除单个子级时,会删除整个Firebase数据库

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">

尝试从父级删除单个子级时,我的整个Firebase数据库将被删除。我的代码没有有效地针对子记录。[角度2 |谷歌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
函数将删除整个数据库,因为on
ref('/')
将:

对于此位置的每个初始子项,将触发一次,并且每次添加新的子项时都将再次触发

因此,对
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();
}