2014-01-07 44 views
2

我只是想在我的第一個小的Angular項目上工作更多,我更新了AngularFire從0.3.0到0.5.0,並沒有什麼真正的工作了。我能夠重新獲得數據庫訪問權限,並且還可以將項目添加到我的列表中。但刪除功能不再工作。在我使用AngularFire之前,我使用了splice(index,1)來刪除一個項目。我也嘗試使用0.5.0中的$ new,但它只是刪除列表中的所有項目,即使我添加了一個鍵。

這就是我的列表重複:

<tr ng-repeat="(key, earning) in earnings | orderByPriority"> 
    <td>{{earning.date}}</td> 
    <td>{{earning.description}}</td> 
    <td>{{earning.price}} €</td> 
    <td> 
     <button class="btn btn-danger" ng-click="removeEarning(key)"> 
     Löschen 
     </button> 
    </td> 

正如你所看到的,它只是創建了數據的TR和每個項目都有一個刪除按鈕。當我點擊特定項目上的刪除按鈕時,只有這個應該被刪除,而不是全部從列表中刪除。

我現在的JS代碼:

function BalanceCtrl($scope, $log, $http, $firebase) { 
    var dbEarnings = new Firebase('https://*******.firebaseio.com/Earnings'); 
    $scope.earnings = $firebase(dbEarnings); 

    $scope.addEarning = function() { 
     $scope.earnings.$add({date:$scope.FormEarningDate, description:$scope.FormEarningDescription, price:$scope.FormEarningPrice});  
     $scope.FormEarningDate = ''; 
     $scope.FormEarningDescription = ''; 
     $scope.FormEarningPrice = ''; 
     $scope.updateEarning();} 

     $scope.removeEarning = function (key) { 
      $scope.earnings.$remove(key); 
     } 

它不以某種方式工作,以從列表中刪除只有特定的項目。這與0.3.0一切正常。有人知道我能做什麼嗎?

+0

這似乎是正確的代碼和$刪除按預期工作在這個例子中:http://plnkr.co/edit/dFQmxUtIbKlhjiW1WV1X?p=preview - 你可以仔細檢查'key'的值是否正確? – Anant

回答

3

orderByPriority過濾器將集合轉換爲數組,導致key成爲數字索引(0,1,2,...) - 它不再是Firebase名稱。

http://angularfire.com/documentation.html

的orderByPriority濾波器由AngularFire提供爲轉換由$火力返回到陣列的 對象。數組 中的對象按優先級排序(如Firebase中定義的)。此外,每個 陣列中的對象都將定義一個$ id屬性,其中 對應於該對象的鍵名。

因此使用removeEarning(earning.$id)

參見http://plnkr.co/edit/pJf2drPwhFAVCuaBSPHq?p=preview

+0

謝謝,幫助:)它的工作。現在我可以繼續使用我的應用程序。 – chillmao

+0

@trevor:當您對子數據執行此操作時,不會生成$ id。請參閱http://plnkr.co/edit/pElPkk這是打算?創建一個子引用確實有效。 –

+0

@ RichardVan'tHoenderdaal是的,這也是我的經驗。我使用'ng-init'來存儲'。$ child(...)'引用。 –