Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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/1/angularjs/24.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_Angularjs_Api_Firebase - Fatal编程技术网

Javascript 无法访问正确的firebase项目密钥以传递到删除功能

Javascript 无法访问正确的firebase项目密钥以传递到删除功能,javascript,angularjs,api,firebase,Javascript,Angularjs,Api,Firebase,与firebase有棘手的问题。我正在尝试访问firebase为每个集合项自动生成的长格式ID(例如-JgnIsMlTLaPuDMEtQP2),以传递给我的删除函数。我之前让它在不同的angular应用程序中工作,如下所示: HTML 上面的代码接收格式正确的键并完美地删除该项,这将立即反映在视图中 但是,我正在尝试使用另一个应用程序,键值被设置为增量索引(例如,0,1,2,3,4…),因此当传递到delete函数时,它不起作用。这是新代码 HTML 登录到控制台时messageRef的格式为

与firebase有棘手的问题。我正在尝试访问firebase为每个集合项自动生成的长格式ID(例如-JgnIsMlTLaPuDMEtQP2),以传递给我的删除函数。我之前让它在不同的angular应用程序中工作,如下所示:

HTML

上面的代码接收格式正确的键并完美地删除该项,这将立即反映在视图中

但是,我正在尝试使用另一个应用程序,键值被设置为增量索引(例如,0,1,2,3,4…),因此当传递到delete函数时,它不起作用。这是新代码

HTML

登录到控制台时messageRef的格式为

https://xxxxxx.firebaseio-demo.com/messages/2
但事实应该是这样

https://xxxxxx.firebaseio-demo.com/messages/-JgnIsMlTLaPuDMEtQP2

我已经尝试了我能找到的每一种组合来让它工作,但到目前为止没有任何东西能解决它。我不知道为什么它会在第一段代码中工作,而不是在第二段代码中工作。我唯一可以添加的是,不工作的应用程序是通过终端中的firebase工具创建的,而工作的应用程序只是一些固定了firebase的角度代码。我还尝试将remove()更改为$remove,但这会引发未定义的方法错误。我完全被难住了。非常感谢您的帮助。

根据Frankvan的建议,我从中获取了一个片段,允许我直接将当前选定的消息传递给angularFire的$remove方法,避免了传递特定消息id的需要

  <li ng-repeat="message in messages">
      .......
    <!-- delete message -->
    <button ng-click="messages.$remove(message)">X</button>
  </li>

我在我的一个项目上对这个问题苦思冥想了一会儿。关键是使用Angular Fire的$loaded方法在调用$remove方法之前等待对象填充,因为这些调用是异步的


你看过AngularFire吗?这是Firebase自己对AngularJS的绑定,它解决了许多映射问题,例如您似乎遇到的问题:将Firebase自动生成的键映射到数组索引(AngularJS需要这些索引)。@Frankvan van Puffelen-感谢您的回复。我很确定angularFire是在应用程序生成时作为服务的一部分而加入的,所以应该可以自动工作。然而,当我使用$remove时,它仍然抛出错误。我将在文档中进一步挖掘,看看我是否遗漏了什么。
//delete message 
$scope.delMessage = function(messageKey) {
  var messageRef = new Firebase('https://xxxxxx.firebaseio-demo.com/messages/');
      // append item key to the path and run remove method
  var messageRef = messageRef.child(messageKey);
  if( messageRef ) {
    messageRef.remove();
    console.log("DEL: " + messageRef); // this logs the endpoint with index number 
    console.log("Message removed successfully!");
  } else {
    console.log("uh oh...problem!");
  }
};
https://xxxxxx.firebaseio-demo.com/messages/2
https://xxxxxx.firebaseio-demo.com/messages/-JgnIsMlTLaPuDMEtQP2
  <li ng-repeat="message in messages">
      .......
    <!-- delete message -->
    <button ng-click="messages.$remove(message)">X</button>
  </li>
<button ng-click="deleteMessage(message)">x</button>
 // delete a specific message 
$scope.deleteMessage = function(message) {
  var msg = JSON.stringify(message.text);
  if(message) {
    var confirm = window.confirm("Are you sure you want to delete: " + msg + "?");
    if(confirm == true) {
      $scope.messages.$remove(message).then(function(){
        alert("Message " + msg + " has been deleted!");
        console.log("Message was removed successfully from firebase!");
      });
    }
  } else {
    console.log("Sorry, there was a problem deleting the message.!");
  }
};