AngularFire - 删除单个项目

时间:2014-03-19 04:12:10

标签: angularjs pug firebase angularfire

以下是我视图中的相关代码:

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);
    }

但是,这会删除我的数据库中的所有条目。我希望它只删除有问题的特定对象。无论如何我还能这样做吗?

5 个答案:

答案 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)
 });

野兽的异步性质让我好几次。