【问题标题】:Use data from factory in controller in angularjs在angularjs的控制器中使用工厂的数据
【发布时间】:2018-03-21 22:08:54
【问题描述】:

我对 AngularJS 很陌生。 我想将数组数据从我的应用程序工厂传递到应用程序控制器。

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

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 作为我的应用控制器中的变量。但我无法得到它。我也尝试过使用服务。有没有最简单的使用数组数据的方法。

【问题讨论】:

    标签: angularjs controller


    【解决方案1】:

    您的语法完全被破坏了,我建议您学习任何 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 语句可能无法完全正常工作。但这更多是作为工厂外观和使用方式的指南。

    【讨论】:

    • 我删除了一些与此处无关的评论行。我得到的“CarsData”的值是数组 [{}, {}, {}, {}]) 的形式。我想在我的控制器中使用相同的数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多