Forma recomendada de obter dados do servidor

Qual é a maneira recomendada de se conectar a fonts de dados do servidor no AngularJS sem usar $resource .

O $resource tem muitas limitações, como:

  1. Não usando futuros apropriados
  2. Não sendo flexível o suficiente

Há casos em que $ resource pode não ser apropriado quando se fala em back-end. Isso mostra como configurar o comportamento do recurso $ sem usar o recurso.

 angular.module('myApp').factory('Book', function($http) { // Book is a class which we can use for retrieving and // updating data on the server var Book = function(data) { angular.extend(this, data); } // a static method to retrieve Book by ID Book.get = function(id) { return $http.get('/Book/' + id).then(function(response) { return new Book(response.data); }); }; // an instance method to create a new Book Book.prototype.create = function() { var book = this; return $http.post('/Book/', book).then(function(response) { book.id = response.data.id; return book; }); } return Book; }); 

Então dentro do seu controle você pode:

 var AppController = function(Book) { // to create a Book var book = new Book(); book.name = 'AngularJS in nutshell'; book.create(); // to retrieve a book var bookPromise = Book.get(123); bookPromise.then(function(b) { book = b; }); }; 

Eu recomendo que você use $ resource .

Pode suportar (replace url) na próxima versão do Angularjs. Então você poderá codificar assim:

 // need to register as a serviceName $resource('/user/:userId', {userId:'@id'}, { 'customActionName': { url:'/user/someURI' method:'GET', params: { param1: '....', param2: '....', } }, .... }); 

E retornos de retorno podem ser tratados no escopo ctrl como este.

 // ctrl scope serviceName.customActionName ({ paramName:'param', ... }, function (resp) { //handle return callback }, function (error) { //handler error callback }); 

Provavelmente você pode manipular código em um nível de abstração mais alto.