2015-01-16 10 views
6

AngularJS $ kaynağını kullanarak tutarlı ve iyi bir örnek işleme bulmak için uğraşıyorum. Güncelleştirmek istediğim, ancak görünmüyor gibi görünen bir örnek burada yer almaktadır: AngularJS PUT on voting application to REST Service

Çekirdeğin en iyi yöntemini/normal gönderim yöntemini hem form gönderimleri hem de Yukarıdaki yazımda belirtilen oylama uygulaması. Herkes bir gösteri gösteren iyi bir örnek var mı?

+1

Aradığınız ne olduğu belli değil: Özel bir PUT isteği nasıl oluşturulur

. Nesne yeniyse (kimliği yoksa) kaydetme POST olur, eğer yeni değilse PUT olacaktır. Hangi kısımda açıklama yapmak istiyorsun? – charlietfl

+0

Bu, aradığım bilgi türüdür. $ Resource için açısal dokümanlar, bir öğenin yeni verilerle nasıl güncelleneceği konusunda biraz belirsizdir. Hizmetin nasıl yapılacağına ve bir kontrol işlemini destekleyen denetleyiciye örnek olarak arıyorum. Şu ana kadarki anlayışım, denetleyicide $ güncellemesi kullanıldığında ve hizmeti yamalarken açık olması gerektiğidir (örn. 'Update': {method: 'PATCH'}). $ Güncellemesine ihtiyacım olmadığını ve ilk verileri nasıl yayınladığımı görmek için bir $ save kullanmam gerektiğini mi söylüyorsunuz? – Kode

cevap

14

Veri deponuzda yeni bir varlık oluşturuyorsanız, POST/kaydet özelliğini kullanmak istiyorsunuz. Veri deponuzda zaten var olan bir varlıkla ilişkili verileri güncelliyorsanız, PUT/update kullanmak istiyorsunuz. Yama, yalnızca varlık verilerinin bir alt kümesini güncellemek istediğinizde ayrılır. Köprü Metni Aktarım Protokolü uzanan RFC

Çeşitli uygulamalarda

Bak (HTTP) kısmi kaynak değişiklik yapmak için bir özellik gerektirir. Varolan HTTP PUT yöntemi yalnızca bir belgenin tam olarak değiştirilmesine izin verir. Bu teklif, varolan bir HTTP kaynağını değiştirmek için yeni bir HTTP yöntemi, PATCH ekler.

Hem PUT hem de PATCH işlemleriyle bir kimlik verirsiniz. Bir POST işlemi ile bir tane tedarik olmaz.

Açısal formlarımızı yüklediğimizde genellikle iki yoldan biriyle yapılır. Form, yeni bir varlık oluştururken yüklenirse, kimliğimiz olmaz. Bunu denetleyicide bileceğiz ve resource.save'yi arayacağız. Formu, formu doldurmak için bir uç noktadan veri çekmek için kullanılan bir kimlikle yükleyen kaynağı sağlarızsa, varlığın ne kadarına bağlı olarak bir resource.update veya resource.patch işlemi yapmak için kullanabileceğimiz kimliğe sahibiz güncelliyoruz.

Hem güncelleştirme hem de kaydetme işlemlerini gerçekleştiren bir örnek kaydetme işlevi. Burada, kaynak aramamızı yapmadan önce rota üzerinden bir kimlik sağlayıp sağlamadığımızı kontrol ediyoruz.

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 
     } 
    }; 
}]); 

İşte angularjs belgelerinden örnek:

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 
}]); 
+0

Öyle ki sadece PUT kullanmak için varsayılan $ update() işlevini ayarlayamazsınız, çünkü o zaman sadece 'object' çalıştırabilirsiniz. $ Save() 've Angular," $ update "veya $ create komutunu çalıştırıp çalıştırmadığına otomatik olarak karar verir. 'bir kimliğine sahip olup olmadığına göre, ancak sonra POST’u kullanır ve kullanır – darkbluesun

İlgili konular