在angularjs中使用工厂控制器中的数据

时间:2018-03-21 10:21:04

标签: angularjs controller

我对AngularJS很新。 我想将数组数据从我的app工厂传递给app控制器。

这是我的app.factory代码。

App.factory('buyFactory', ['$http', function($http) {
        factory.Search = function(scope, d) {
          var data = scope.search;
          scope.CarsData = [];
          all_cars = [];
          scope.isLoading = true;
          $http.post(ajaxurl + '?action=search_car', d)
            .success(function(response) {
                angular.forEach(response, function(c) {
                  c.price = parseFloat(c.price);
                  c.driven = parseFloat(c.driven);
                  c.year = parseFloat(c.year);
                });

                angular.forEach(response, function(value, key) {
                    all_cars.push(value);
                    scope.CarsData = all_cars;
                    scope.TotalItems = scope.CarsData.length;
                    scope.isLoading = false;
                  })
                  .error(function(data, status, headers, config) {
                    // called asynchronously if an error occurs
                    // or server returns response with an error status.
                    scope.isLoading = false;

                  });
              }
              return factory;
            }]);

这是app.controller as

App.controller('buyController', ['$scope', '$http', 'buyFactory', '$filter', function($scope, $http, buyFactory, $filter) {
  $scope.CarsScroll = buyFactory.Search.CarsData();
  $scope.loadMore = function() {
    var last = $scope.CarsScroll[$scope.CarsScroll.length - 1];
    for (var i = 1; i <= 3; i++) {
      $scope.CarsScroll.push(last + i);
    }
  };
  //scroll


}]);

我想使用从工厂获得的输出,即CarsData作为我的app控制器中的变量。但我无法得到它。我也尝试过使用服务。是否有以最简单的方式使用数组数据的方法。

1 个答案:

答案 0 :(得分:0)

您的语法完全被破坏,我建议您遵循AngularJS的任何课程。至于如何正确地做你想做的事情会看起来像这样

app.factory('buyFactory', ['$http', '$q', function($http, $q) { 
    var factory = {
        search: function(d) {           
            return $q(function(resolve, reject) {
                $http.post(ajaxurl + '?action=search_car', d).then(function(response) {
                    angular.forEach(response, function(c) {
                        c.price = parseFloat(c.price);
                        c.driven = parseFloat(c.driven);
                        c.year = parseFloat(c.year);
                    });
                    var carsData = [];
                    angular.forEach(response, function(value, key) {                        
                        carsData.push(value);
                    })

                    var result = {
                        carsData: carsData,
                        total: carsData.length
                    }                   
                    resolve(result);                    
                }, function(error) {                    
                    reject(error);
                })              
            });         
        }
    }

    return factory;
}]);

app.controller('buyController', ['$scope', '$http', 'buyFactory', '$filter', function($scope, $http, buyFactory, $filter) {
  buyFactory.search().then(function(result) {
      var cars = result.carsData;
      var total = result.total;
  })
}]);

注意:我不知道d参数是什么,也不知道为什么angular.forEach语句可能没有完全起作用。但这更像是工厂应该如何看待和使用的指导原则。