2014-03-19 78 views
5

這在我看來是相關代碼: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); 
    } 

然而,這消除在我的數據庫中的所有條目。我希望它只刪除有問題的特定對象。無論如何對我來說這樣做?

回答

8

好吧,算出來。

當使用ng-repeat循環時,請使用(id, t) in todos。這使您可以將id作爲參數發送給ng-click函數,而$scope.todos.$remove(id)可以正常工作。

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

1

我能夠刪除該項目是利用我們的火力得到陣列上的循環的唯一方法。

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

slfan立即檢查出來 –

0

刪除對象的最簡單的方法是

scope.clearItem = function(event) { 
    todoRef.$loaded().then(function(){ 
    todoRef.$remove($scope.t) 
}); 

獸的異步特性已經得到了我幾次。

4

爲了給其他任何人登陸這裏更完整的示例,根據Firebase's documentation for AngularFire這將是首選的方式,我相信最簡單的方法來刪除對象:

// 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> 

希望幫助!