我正在重写一些棱角分明的代码,因为事情还不清楚,文件稀疏。

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

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

我打算为每个数据提要添加一个factory,以便可以在整个应用程序中多次访问它们。然后,任何指令或控制器都可以与相关模块关联,因此对于产品Feed,我将具有以下内容:

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


这意味着,如果我需要在其他控制器中提供产品,则可以轻松实现。例如,我可以在不同的控制器中购买最后三款产品,然后修改传递回后端的参数。

最佳答案

为这些请求提供工厂的想法很不错。您只希望函数返回一个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。事情变得非常混乱,传递回调。承诺就是要走的路。

关于javascript - 设计系统以从后端访问JSON提要,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27258434/

10-14 00:08