Firebase 简单的 REST 删除?

Mic*_*bry 2 rest angularjs firebase

我在 firebase 中的数据如下所示。我正在阅读https://www.firebase.com/docs/rest/api/并且很奇怪,我正在尝试删除一个项目。

burning-*

contacts  

     -K7qAf6egBeg5l3e_Gjc
       name: "Ind"
       phonenumber: "(408) ***-***"
       uid: "1"

     -K7qB8Afu7bIm9LUtV68
       name: "Paul Bhayya"
       phonenumber: "(408) ***-***"
       uid:"2"
Run Code Online (Sandbox Code Playgroud)

在 angular.js 中,我在我的自定义指令中进行了这个调用。

$http.delete(Firebaseurl + '/contacts/'+scope.contact.name+'/.json').then(function(result) {
    console.log(result);
});
Run Code Online (Sandbox Code Playgroud)

api 对我来说没有意义,我看到问题可能是我的数据现在嵌套在一个带有奇怪 ID 的键中,即-K7qAf6egBeg5l3e_Gjc.

所以我想知道如何通过键来调用删除一个项目,name所以如果客户端点击该联系人说Ind被点击,那么我告诉 Firebase 删除具有该名称的联系人。也许 ID 更好,但不管怎样都行。

编辑:

仅供参考,我解析的 Firebase 对象selectedContacts是对象的 GET 方法的结果。对于我的 angular 代码,它的格式不是很好,所以我把它变成了一个干净的对象数组,我用它来与其他数据集进行比较以传递给$scope

Object.keys(selectedContacts.data).forEach(function(key) {
  selectedContactsArray.push(selectedContacts.data[key]);
});

selectedContactsArray.filter( function( item ) {
    for( var i=0, len=usersContacts.length; i<len; i++ ){
        if( usersContacts[i].name == item.name ) {
            usersContacts[i]['selectedContact'] = true
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

要按名称获取用户:

...firebaseio.com/contacts.json?orderBy="name"&equalTo="Ind"&limitToFirst=1
Run Code Online (Sandbox Code Playgroud)

您必须在安全规则中添加索引:

{
  "rules": {
    "contacts": {
      ".indexOn": ["name"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有了这个索引,查询将返回一个像这样的对象:

{
  "-K7qAf6egBeg5l3e_Gjc": {
     "name": "Ind",
     "phonenumber": "(408) ***-***",
     "uid": "1"
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以从那里读取密钥,然后对它执行 REST DELETE 请求

...firebaseio.com/contacts/-K7qAf6egBeg5l3e_Gjc.json
Run Code Online (Sandbox Code Playgroud)

但正如对您的问题的评论中所讨论的那样,您也可以使用 AngularFire 来做同样的事情。