我一直在努力寻找使用AngularJS $资源的put操作的一致且好的示例。我想要更新的示例,但似乎无法更新:AngularJS PUT on voting application to REST Service
我的核心是,我需要了解表格提交或上述帖子中提到的投票申请中的最佳实践/正常方式。有没有人有一个很好的例子来演示一个put?
答案 0 :(得分:14)
如果您要在数据存储中创建新实体,则需要使用POST / save。如果您要更新与数据存储中已存在实体关联的数据,则需要使用PUT / update。当您只想更新实体数据的子集时,通常会保留修补程序。
查看RFC
扩展超文本传输协议(HTTP)的几个应用程序 需要一个功能来进行部分资源修改。现有的 HTTP PUT方法仅允许完全替换文档。这个 proposal添加了一个新的HTTP方法PATCH来修改现有的HTTP 资源。
您将提供具有PUT和PATCH操作的id。你不会提供一个POST操作。
当我们加载角形时,它通常采用两种方式之一。如果在我们创建新实体时加载了表单,那么我们就不会拥有ID。我们将在控制器中知道这一点,并将调用resource.save。如果我们向控制器提供加载表单的id,该id用于从端点提取数据以填充表单,我们现在可以使用id来执行resource.update或resource.patch操作,具体取决于方式我们正在更新的大部分实体。
这是一个处理更新和保存操作的示例保存功能。在这里,我们检查是否在我们进行资源调用之前通过路由提供了id。
angular.module('appModule').controller('ExampleCtrl',
['$scope', '$routeParams',
function($scope, $routeParams) {
$scope.saveForm = function () {
//Do input validation before you make a resource call
if ($routeParams.id) {
//call resource update since we have an id
}
else {
//call resource save since we don't have an id
}
};
}]);
以下是angularjs文档中的示例:
如何创建自定义PUT请求:
var app = angular.module('app', ['ngResource', 'ngRoute']);
// Some APIs expect a PUT request in the format URL/object/ID
// Here we are creating an 'update' method
app.factory('Notes', ['$resource', function($resource) {
return $resource('/notes/:id', null,
{
'update': { method:'PUT' }
});
}]);
// In our controller we get the ID from the URL using ngRoute and $routeParams
// We pass in $routeParams and our Notes factory along with $scope
app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',
function($scope, $routeParams, Notes) {
// First get a note object from the factory
var note = Notes.get({ id:$routeParams.id });
$id = note.id;
// Now call update passing in the ID first then the object you are updating
Notes.update({ id:$id }, note);
// This will PUT /notes/ID with the note object in the request payload
}]);