设计一个从后端访问JSON源的系统

时间:2014-12-02 20:34:17

标签: javascript angularjs

我正在重写一些角度代码的过程,因为事情不清楚且记录不清。

我有许多以JSON形式返回的数据Feed。例如,我有一个产品供稿,但也有其他供稿,如天气和新闻等。

我对角度很陌生,所以我想检查一下我的想法是否足够好还是可以改进。

我打算为每个数据Feed添加factory,以便在整个应用中多次访问它们。然后,任何指令或控制器都可以与相关模块相关联,因此对于产品供稿我会有这样的事情:

    angular.module('products', [])

    .factory('products', function($http) {
      var products = {};
      products.get = function(params, callback) {
        $http.get('/php/products.php', {params: {page: params.page}}).success(function(data) {
          callback(data);
        });
      };
      return products;
    });

    angular.module('app', ['products'])


    .controller('productsCtrl', function ($scope, products){
       $scope.page = 1;
       $scope.products=[];

        products.get({page: $scope.page}, function (data) {
          for (var i = 0; i < data.length; i++) {
            $scope.products.push(data[i]);
          }
        })
    });

这意味着如果我需要在不同的控制器中提供产品,我可以轻松地做到这一点。例如,我可以在不同的控制器中购买最后三个产品,并修改传递给后端的参数。

2 个答案:

答案 0 :(得分:1)

这对我来说足够了。如果你有一个更强大的API可以使用(也许是完整的CRUD),那么ngResource可能更合适,但我认为你很好。

答案 1 :(得分:1)

背后的想法有一个工厂,这些请求是一个很好的。你只希望你的函数返回一个promise而不是传递一个回调。像这样:

    angular.module('products', [])

    .factory('products', function($http) {
      var products = {};
      products.get = function(params) {
        return $http.get('/php/products.php', {params: {page: params.page}});
      };
      return products;
    });

    angular.module('app', ['products'])


    .controller('productsCtrl', function ($scope, products){
       $scope.page = 1;
       $scope.products=[];

        products.get({page: $scope.page}).then(function (response) {
          for (var i = 0; i < response.data.length; i++) {
            $scope.products.push(data[i]);
          }
        }, function(errorResponse) {
           //any error handling
        })
    });

有关承诺的更多信息,请参阅$q service。传递回调的事情变得相当混乱。承诺是可行的。