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