denis
denis

Reputation: 23

remove just a item by angularfire

I just want to remove an item, but my code removes all the items. I don't understand and can't find another solution,

please help

<div ng-repeat="(id, data) in datas">
<input type="text" ng-model="data.name" ng-change="datas.$save(data)" />  
<input type="text" ng-model="data.age" ng-change="datas.$save(data)" />
<a ng-click="removeItem(id)">delete</a>
</div>


ref = new Firebase(FIREBASE_URL);
authData = ref.getAuth();
obj = $firebaseObject(ref);    
obj.$remove(id);

Upvotes: 0

Views: 1536

Answers (2)

Frank van Puffelen
Frank van Puffelen

Reputation: 599571

If FIREBASE_URL points to your list (or even entire database), then indeed your code will delete that list. This is expected behavior. Since you're using $firebaseObject, calling $remove() on that will remove the object; in this case the entire list of items.

To remove only the item with id:

var ref = new Firebase(FIREBASE_URL);
var items = $firebaseArray(ref);    
items.$remove(items.$indexFor(id));

This is a bit convoluted btw, you can just as easily do:

new Firebase(FIREBASE_URL).child(id).remove();

This has been asked before, so please become friendly with search:

Upvotes: 2

georgeawg
georgeawg

Reputation: 48968

To delete just a single property from a Firebase object use the JavaScript delete operator and then $save the object.

HTML

<div ng-repeat="(key, data) in datas">
    <input type="text" ng-model="data.name" ng-change="datas.$save()" />  
    <input type="text" ng-model="data.age" ng-change="datas.$save()" />
    <button ng-click="removeItem(key)">delete</button>
</div>

JS

var ref = new Firebase(FIREBASE_URL);
var authData = ref.getAuth();

$scope.datas = $firebaseObject(ref);

$scope.removeItem = function(key) {
    delete $scope.datas[key];   
    $scope.datas.$save();
};

For more information, see MDN JavaScript Reference -- delete operator.

Upvotes: 0

Related Questions