2014-03-19 2 views
5

Hier ist der relevante Code in meiner Sicht:AngularFire - entfernen Single Item

p(ng-repeat="t in todos") 
input(
    type="checkbox", 
    ng-model="t.done", 
    ng-click="clearItem($event)" 
    ) 
{{t.text}} done? {{t.done}} 

Wenn das Kontrollkästchen geklickt wird, mag ich das entsprechende Objekt in dem todos Array aus der Datenbank entfernt werden.

Meine clearItem Funktion ist wie folgt:

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

Dies ist jedoch entfernt alle Einträge in der Datenbank. Ich möchte, dass nur das betreffende Objekt entfernt wird. Gibt es das überhaupt für mich?

Antwort

8

Ok, habe es herausgefunden.

Verwenden Sie zum Schleifen mit ng-repeat(id, t) in todos. Dadurch können Sie id als Parameter an die ng-click-Funktion senden, und $scope.todos.$remove(id) funktioniert einwandfrei.

1

wäre eine bessere Lösung sein $scope.clearItem() nehmen t das Objekt zu haben als Argument, statt $event.

HTML - <p ng-repeat="t in todos"><input... ng-click="clearItem(t)">

JS - $scope.clearItem = function(obj) {todoRef.$remove(obj)};

1

Der einzige Weg, ich bin in der Lage um das Element zu entfernen, ist eine Schleife auf dem Array wir von Feuerbasis erhalten.

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 Überprüfen Sie dies jetzt –

0

Der einfachste Weg wäre, das Objekt entfernen

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

Die asynchrone Natur des Tieres ein paar Mal bekommen mich hat.

4

Um ein vollständigeres Beispiel für alle anderen, die hier landet bieten, Firebase's documentation for AngularFire nach dies die bevorzugte Art und Weise sein würde, und ich glaube, der einfachste Weg, um ein Objekt zu entfernen:

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

Ihrer Ansicht Sie könnte etwas wie unten tun. Beachten Sie, dass Sie die removeTodo Funktion auf eine Checkbox binden könnte als die Frage gibt, oder ein reguläres alt <a href> Element:

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

Hoffnung, das hilft!