首页 文章

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

提问于
浏览
0

我是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

    您的语法完全被破坏,我建议您遵循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语句可能没有完全起作用 . 但这更像是工厂应该如何看待和使用的指导原则 .

相关问题