Est-il toujours vrai que $ resource a la limitation de ne pas utiliser de futurs appropriés étant donné que ce problème (https://github.com/angular/angular.js/issues/415) a été résolu? (Je suis nouveau sur Angular, mes excuses si la question prête à confusion.) EDIT - Ce commit ( github.com/angular/angular.js/commit/… ) semble également suggérer que $ resource n'a peut-être plus cette limitation?
Jason Sydes
1
eh bien c'est légal ici pour répondre à vos propres questions .. ok? appuyez sur "Poser une question", cela s'appelle "partagez vos connaissances"
holms
Réponses:
229
Il y a des cas où $ resource peut ne pas être approprié pour parler au backend. Cela montre comment configurer $ resource comme un comportement sans utiliser de ressource.
angular.module('myApp').factory('Book',function($http){// Book is a class which we can use for retrieving and // updating data on the servervarBook=function(data){
angular.extend(this, data);}// a static method to retrieve Book by IDBook.get=function(id){return $http.get('/Book/'+ id).then(function(response){returnnewBook(response.data);});};// an instance method to create a new BookBook.prototype.create =function(){var book =this;return $http.post('/Book/', book).then(function(response){
book.id = response.data.id;return book;});}returnBook;});
Ensuite, à l'intérieur de votre manette, vous pouvez:
varAppController=function(Book){// to create a Bookvar book =newBook();
book.name ='AngularJS in nutshell';
book.create();// to retrieve a bookvar bookPromise =Book.get(123);
bookPromise.then(function(b){
book = b;});};
Peut-être une question noob, mais comment étendre cela pour permettre un get () qui renvoie plusieurs réponses et non une seule réponse?
Nate Bunney
2
@NathanBunney, vous pourriez avoir votre méthode get statique ci-dessus en boucle sur les résultats et créer un tableau de livres.
Ben Lesh
4
@NathanBunney 'Book.getAll = function () {return $ http.get (' / Book '). Then (function (response) {var books = []; for (var i = 0; i <response.data.length ; i ++) {books.push (new Book (response.data [i]));} return books;}); }; '
Yair Nevet le
2
Comment partageriez-vous une bookou une collection de books entre les contrôleurs?
Lukas
1
C'est génial (évidemment depuis que Misko a créé le framework), mais j'ai du mal à comprendre comment le rendre réutilisable. Si je voulais implémenter les fonctions CRUD une seule fois, puis hériter de leurs fonctionnalités dans les usines / services enfants qui n'avaient besoin que d'un argument urlBase (de préférence stocké sur le prototype afin que chaque instance n'ait pas besoin d'une nouvelle copie de l'urlBase), comment Je fais ça?
Il peut prendre en charge (remplacement d'url) dans la prochaine version d'Angularjs. Ensuite, vous pourrez coder comme ceci:
// need to register as a serviceName
$resource('/user/:userId',{userId:'@id'},{'customActionName':{
url:'/user/someURI'
method:'GET',params:{
param1:'....',
param2:'....',}},....});
Et les rappels de retour peuvent être gérés dans la portée ctrl comme ceci.
Réponses:
Il y a des cas où $ resource peut ne pas être approprié pour parler au backend. Cela montre comment configurer $ resource comme un comportement sans utiliser de ressource.
Ensuite, à l'intérieur de votre manette, vous pouvez:
la source
book
ou une collection debook
s entre les contrôleurs?Je vous recommande d'utiliser $ resource .
Il peut prendre en charge (remplacement d'url) dans la prochaine version d'Angularjs. Ensuite, vous pourrez coder comme ceci:
Et les rappels de retour peuvent être gérés dans la portée ctrl comme ceci.
Vous pouvez probablement gérer le code à un niveau d'abstraction supérieur.
la source