以下是我视图中的相关代码:
p(ng-repeat="t in todos")
input(
type="checkbox",
ng-model="t.done",
ng-click="clearItem($event)"
)
{{t.text}} done? {{t.done}}
单击该复选框时,我希望从数据库中删除todos
数组中的相应对象。
我的clearItem
功能如下:
$scope.clearItem = function(event) {
todoRef.remove($scope.t);
}
但是,这会删除我的数据库中的所有条目。我希望它只删除有问题的特定对象。无论如何我还能这样做吗?
答案 0 :(得分:8)
好的,想通了。
使用ng-repeat
进行循环时,请使用(id, t) in todos
。这样,您就可以将id
作为参数发送到ng-click
函数,$scope.todos.$remove(id)
就可以了。
答案 1 :(得分:4)
根据Firebase's documentation for AngularFire提供更适合其他任何人的示例,根据{{3}}这将是首选方式,我相信删除对象的最简单方法:
// Create an app. Synch a Firebase array inside a controller
var myApp = angular.module("myApp", ["firebase"]);
// inject $firebaseArray
myApp.controller("TodoCtrl", ["$scope", "$firebaseArray", function($scope, $firebaseArray) {
// bind $scope.todos to Firebase database
$scope.todos = $firebaseArray(myFirebaseRef.child("todo"));
// create a destroy function
$scope.removeTodo = function(todo) {
$scope.todos.$remove(todo);
};
}]);
在您看来,您可以执行以下操作。请注意,您可以将removeTodo函数绑定到问题指定的复选框或常规的旧<a href>
元素:
// In your view
<div ng-controller="TodoCtrl">
<ul>
<li ng-repeat="todo in todos">
{{ todo.text }} : <a href ng-click="removeTodo(todo)">X</a>
</li>
</ul>
</div>
希望有所帮助!
答案 2 :(得分:1)
更好的解决方案是让$scope.clearItem()
将对象t
作为参数,而不是$event
。
HTML - <p ng-repeat="t in todos"><input... ng-click="clearItem(t)">
JS - $scope.clearItem = function(obj) {todoRef.$remove(obj)};
答案 3 :(得分:1)
我能够删除项目的唯一方法是在我们从firebase获取的数组上使用循环。
var ref= new Firebase('https://Yourapp.firebaseio.com/YourObjectName');
var arr_ref=$firebaseArray(ref);
for(var i=0;i<arr_ref.length;i++){
if(key==arr_ref[i].$id){
console.log(arr_ref[i]);
arr_ref.$remove(i);
}
}
答案 4 :(得分:0)
删除对象的最简单方法是
scope.clearItem = function(event) {
todoRef.$loaded().then(function(){
todoRef.$remove($scope.t)
});
野兽的异步性质让我好几次。