Размещение только изменить поля на $ Sake of $ Resource
-
12-12-2019 - |
Вопрос
При вызове $ Сохранить на Ngresource, возможно ли опубликовать только редактированные поля отредактированных полей, а не выставлять всю модель каждый раз?
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}
});
. Решение
Нет, это невозможно, по крайней мере, не в экземплярах, см. http:// docs.Angularjs.org/api/ngresource.$Resource
[...] Методы действия на объекте класса или объекта экземпляра могут быть вызваны следующим Параметры:
.
- http get "Класс" Действия:
Resource.action([parameters], [success], [error])
- Неизведанные действия "Класс":
Resource.action([parameters], postData, [success], [error])
- Неизведанное действие экземпляра:
instance.$action([parameters], [success], [error])
Итак, это возможно, пройдя только данные для сохранения в «статическом» методе сохранения, т. Е. Генеракодицетагкод.Что-то вроде этого:
User.get(function(user)
{
user.name = 'John Smith';
User.save({name: user.name});
});
.
Разработает ли это, наверное, будет зависеть от того, что вы собираетесь делать с экземпляром User.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;
});
};
.
Это предполагает, что когда запрос на почту отправляется на ресурс (т. Е. ГенеракодицетагCode), ваш сервер отвечает последней обновленной версией модели ModelInstace.