如何构造angularjs服务以使用REST API?

时间:2015-06-30 11:46:34

标签: javascript angularjs rest

我想知道在Angular应用程序中构建服务/工厂以使用REST API的最佳方法。我知道$resource,但我不想使用它,因为我的API有点特殊,而不仅仅是/api/resource/:id上的CRUD等。

我能想到两种基本方式,我不确定哪种方式更好。我想这两者都有上升和下降,这就是我要问的原因。

选项1

拥有一个API工厂,每个模型都有许多方法。这看起来像这样:

angular.module('myApp', ['$http'])

.factory('apiService', function() {
  var o = {
    posts: [],
    comments: []
  };
  o.getAllPosts = function() {
    return $http.get('/api/v1/posts').success(function(data){
      angular.copy(data, o.posts);
    });
  };
  o.getAllComments = function() {
    return $http.get('/api/v1/comments').success(function(data){
      angular.copy(data, o.comments);
    });
  };
})

.controller('MainCtrl', function($scope, apiService) {
  // Get all posts
  $scope.posts = apiService.getAllPosts();
  // Get all comments
  $scope.comments = apiService.getAllComments();
});

选项2

为每个数据模型建立工厂。像这样:

myModule.factory('posts', ['$http', function($http){
  var o = {
    posts: [],
    post: {}
  };
  o.getAll = function() {
    return $http.get('/api/v1/posts').success(function(data){
      angular.copy(data, o.posts);
    });
  };
  o.getOne = function(params) {
    return $http.get('/api/v1/posts/'+params.hash_id).success(function(data){
      angular.copy(data, o.post);
    });
  };
  o.create = function(post) {
    return $http.post('/api/v1/posts', post).success(function(data){
      o.posts.unshift(data);
    });
  };
  return o;
}]);

.controller('MainCtrl', function($scope, posts) {
  // Get all posts
  $scope.posts = posts.getAll();
});

处理此问题的更好方法是什么?为什么?

0 个答案:

没有答案