我将表单数据提交到我的API,但我的模型包含我的整个对象。我真的应该只提交更新,对吗?
所以,
(想象一下更大的形式 - 六个以上的只读字段和六个可编辑的字段。)
如果我错了,请纠正我,但是,当发送到我的API时,我不应该发送整个项目对象。数据库已经有了标题,为什么要把它放在有效负载中它会被扔掉?
所以,我应该只发送可编辑字段的值。
我试图找出将模型与表单数据分开的正确方法,因此我提交后者,而不是前者。如果这是不最佳实践,请指正。
控制器:
.controller('editItemController', ['$stateParams',
function($stateParams) {
var vm = this;
vm.getItem = function () {
$http.get('/api/Items/' + $stateParams.id).then(function (response) {
vm.item = response.data;
});
};
vm.saveChanges = function () {
vm.submitted = true;
if (vm.detailsForm.$valid) {
$http.put('/api/Items/' + $stateParams.id, vm.item).then(function (response) {
});
}
};
vm.getItem();
}
查看:
<form name="itemVm.detailsForm" ng-controllerAs="itemVm">
<input type="hidden" name="Id" ng-model="itemVm.item.Id" />
<div class="form-group">
<label for="title" class="control-label col-xs-3">Title:</label>
<div class="col-xs-9">
<input type="text" class="form-control" readonly="readonly" id="title" value="{{ itemVm.item.Title }}">
</div>
</div>
<div class="form-group">
<label for="description" class="control-label col-xs-3">Description:</label>
<div class="col-xs-9">
<input type="text" class="form-control" name="description" ng-model="itemVm.item.Description" required>
</div>
</div>
<button ng-click="itemVm.saveChanges()">Save Changes</button>
</form>
答案 0 :(得分:0)
对于标准REST API,您应该发送整个对象。 REST背后的整个想法是你转移对象状态的表示,从而表示状态转移。因此,它应该是一个完整的表示,而不是一部分。
如果您真的喜欢,有多种方法可以避免这种情况,而且大部分方法都与后端有关,而不是前端。
创建一个ad hoc端点以接收一个参数并相应地更新持久对象。 (不推荐)。
如果你想发送部分数据(根据对象的大小,我认为这是一个好主意),你应该相应地在后端处理它。
请参阅here。