从服务器获取数据的推荐方法

在 AngularJS 中,不使用 $resource连接到服务器数据源的推荐方法是什么。

$resource有许多局限性,例如:

  1. 没有使用正确的未来
  2. 不够灵活
56246 次浏览

在某些情况下,$resource 在与后端通信时可能不合适。这展示了如何在不使用资源的情况下设置类似 $resource 的行为。

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

然后在你的控制器里你可以:

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

我建议您使用 $资源

它可能支持(网址覆盖)在 Angularjs 的下一个版本。 然后您就可以像这样编写代码:

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

返回回调可以在 ctrl 作用域中像这样处理。

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

也许你能处理更高抽象层的代码。