2012-10-02 17 views
0

在ngResource上調用$ save時,是否可以只發布編輯的字段而不是每次發佈整個模型?

var User = $resource('http://example.com/user/123/'); 

User.get(function(user) { 
    user.name="John Smith"; 
    user.$save(); 
    // What I *want* -> POST: /user/123/ {name:'John Smith'} 
    // What currently happens -> POST: /user/123/ {name:'John Smith', age: 72, location: 'New York', noOfChildren: 5} 
}); 

回答

0

不,這是不可能的,至少不是在的情況下,看到http://docs.angularjs.org/api/ngResource.$resource

[...]類對象或實例對象上的操作方法可以通過以下 參數調用:

  • HTTP GET 「下課」 的行動:Resource.action([parameters], [success], [error])
  • 非GET 「下課」 的行動:Resource.action([parameters], postData, [success], [error])
  • 非GET實例操作:instance.$action([parameters], [success], [error])

因此,它通過將數據保存到「靜態」保存方法,即User.save只是可能。事情是這樣的:

User.get(function(user) 
{ 
    user.name = 'John Smith'; 
    User.save({name: user.name}); 
}); 

無論這個作品出來你可能會取決於你打算用user實例做什麼。

+0

這是成功了嗎?我正在用類似的東西摔跤:$資源返回大量數據,但我只想一次更新一點點數據。 – schultzter

1

當我想只保存一個領域,我使用靜態.save()方法,有回調需要從響應併成功更新本地對象:

$scope.saveOneField = function(modelInstance) { 
    ModelName.save({ 
    id: modelInstance.id, 
    theField: <some value> 
    }, function(response) { 
    // If you want to update *all* the latest fields: 
    angular.copy(response, modelInstance.data); 
    // If you want to update just the one: 
    modelInstance.theField = response.data.theField; 
    }); 
}; 

這假設,當一個POST請求被髮送到資源(即,/modelnames/:id),您的服務器將使用modelInstace的最新更新版本進行響應。

+0

這是最好的。 – NiRR