2013-05-01 33 views
2

我有一個顯示的項目的列表的視圖:如何給角度資源添加回調?

<li ng-repeat="item in items">{{item.name}}</li> 

與此相關聯的服務是:

angular.module('itemService', ['ngResource']). 
    factory('Item', function($resource){ 
     return $resource('/api/v1/item/:itemId', {}, { 
      query: {method:'GET', params:{itemId : ''},   isArray : true}, 
      get:  {method:'GET', params:{itemId : ''},   isArray : false}, 
      save: {method:'POST', params:{itemId : ''},   isArray : false}, 
      update: {method:'PUT', params:{itemId : '@_id.$oid'}, isArray : false} 
     }); 
    }); 

最後我使用查詢時,所述控制器被initialied加載的項目的列表。

function ItemCtrl($scope, Item) { 

    $scope.items = Item.query(); 
    .... 

在同一頁上,我可以創建新項目,並呼籲save()將它們保存到服務器。但是當我這樣做時,我想更新視圖來顯示新項目,而不是用query()重新加載整個列表。由於視圖是正式記錄,我假設在成功保存項目後,我應該將其推到項目的末尾。這應該在save()完成後完成,因此我想知道如何爲保存功能添加/指定回調。

編輯:save()返回保存項目的副本(如果成功),以便我可以確保該項目已成功保存在服務器上。

+1

也許我誤解,但你不能只通過回調,當你調用Item.save(...)?與此處的User.get()示例類似:http://docs.angularjs.org/api/ngResource.$resource – Jonah 2013-05-01 01:06:26

+0

雖然這可以在大多數情況下使用,但您應該知道將保存的記錄推送到列表中可能不會一個好的做法。它取決於從'query'返回的數據是否與保存返回的數據相同。在一些情況下,'query'只返回最重要的模型屬性,而'save'將具有所有屬性;有時'save'不會返回完整的數據(如自動創建日期)。所以除非你覆蓋所有這些邊緣情況,否則再次實際調用'query'是有意義的。 – Izhaki 2015-05-28 22:56:50

回答

2

the documentaton here:

Item.$save(function(item, putResponseHeaders) { 
    //item => saved user object 
    //putResponseHeaders => $http header getter 
});