Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法将角度工厂数据获取到控制器中_Javascript_Angularjs - Fatal编程技术网

Javascript 无法将角度工厂数据获取到控制器中

Javascript 无法将角度工厂数据获取到控制器中,javascript,angularjs,Javascript,Angularjs,试图从工厂获取数据并将其传递到控制器,然后用于ng重复。不确定原因,但控制器从未运行在工厂中建立的功能 控制器 angular.module('myApp').controller('AppController',['$scope','ItemsFactory', function($scope,ItemsFactory){ ItemsFactory.getItems(function(err, data){ $scope.items = data; cons

试图从工厂获取数据并将其传递到控制器,然后用于ng重复。不确定原因,但控制器从未运行在工厂中建立的功能

控制器

angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
  function($scope,ItemsFactory){
    ItemsFactory.getItems(function(err, data){
      $scope.items = data;
      console.log('controller items', $scope.items);
    });
}]);
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
  function($scope, ItemsFactory){

    ItemsFactory.getItems(function(err, data){
      $scope.items = data;
      console.log('controller items', $scope.items);
    });
}]);
工厂

angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(){
      $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response, data){
        var results = response.data;
        console.log('factory results', results);
      }, function error(response){
        console.log('error getting items');
      });
    };
    return{
      getItems: getItems
    };
});
angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(callback){
      $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response, data){
        var results = response.data;
        if(callback) callback(null, results);
      }, function error(response){
        console.log('error getting items');
      });
    };
    return{
      getItems: getItems
    };
});
下面是一些其他发布的示例,但似乎也没有任何效果

结果由工厂返回,只是无法传递给控制器

编辑

真诚地感谢大家的回答,因为他们都非常有用,在承诺和回访方面发挥了很大作用

决定使用@Fernando Fabreti答案,因为它尽可能接近我想要的答案

工厂

angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(){
      $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response, data){
        var results = response.data;
        console.log('factory results', results);
      }, function error(response){
        console.log('error getting items');
      });
    };
    return{
      getItems: getItems
    };
});
angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(callback){
      $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response, data){
        var results = response.data;
        if(callback) callback(null, results);
      }, function error(response){
        console.log('error getting items');
      });
    };
    return{
      getItems: getItems
    };
});
控制器

angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
  function($scope,ItemsFactory){
    ItemsFactory.getItems(function(err, data){
      $scope.items = data;
      console.log('controller items', $scope.items);
    });
}]);
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
  function($scope, ItemsFactory){

    ItemsFactory.getItems(function(err, data){
      $scope.items = data;
      console.log('controller items', $scope.items);
    });
}]);

您需要定义回调参数,并在获得结果后“调用”回调:

angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(cback){
      $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response, data){
        var results = response.data;
        console.log('factory results', results);
        if (cback) cback(null, results); 
      }, function error(response){
        console.log('error getting items');
        if (cback) cback(response, null);
      });
    };
    return{
      getItems: getItems
    };
});

您需要定义回调参数,并在获得结果后“调用”回调:

angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(cback){
      $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response, data){
        var results = response.data;
        console.log('factory results', results);
        if (cback) cback(null, results); 
      }, function error(response){
        console.log('error getting items');
        if (cback) cback(response, null);
      });
    };
    return{
      getItems: getItems
    };
});

您在这里混合了callback和promise调用方法的风格。您似乎希望将回调传递给getItems(getItems不接受任何参数),并使用工厂中基于承诺的结果(尽管您不返回任何承诺)

决定你想做什么。如果要使用承诺表单,请执行以下操作(为了简单起见):

在控制器中,使用then或error函数执行某些操作

ItemsFactory.getItems().then(function(response) {
    $scope.items = response.data;
})
.catch(function(response) {
    console.error('error', response.status, response.data);
})

您在这里混合了callback和promise调用方法的风格。您似乎希望将回调传递给getItems(getItems不接受任何参数),并使用工厂中基于承诺的结果(尽管您不返回任何承诺)

决定你想做什么。如果要使用承诺表单,请执行以下操作(为了简单起见):

在控制器中,使用then或error函数执行某些操作

ItemsFactory.getItems().then(function(response) {
    $scope.items = response.data;
})
.catch(function(response) {
    console.error('error', response.status, response.data);
})

您应该使用从
$http
返回的承诺,而不是使用回调。只需返回
$http()
的结果,就可以调用
.then()
来获取数据

工厂:

angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(){
      return $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response){
        return response.data;
      }, function error(response){
        console.log('error getting items');
      });
    };
    return{
      getItems: getItems
    };
});
控制器:

angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
  function($scope,ItemsFactory){
    ItemsFactory.getItems().then(function (data) {
         $scope.items = data;
    });
}]);

您应该使用从
$http
返回的承诺,而不是使用回调。只需返回
$http()
的结果,就可以调用
.then()
来获取数据

工厂:

angular.module('myApp').factory('ItemsFactory', function($http){
    var getItems = function(){
      return $http({
        method: 'GET',
        url: 'js/data/data.min.json'
      }).then(function success(response){
        return response.data;
      }, function error(response){
        console.log('error getting items');
      });
    };
    return{
      getItems: getItems
    };
});
控制器:

angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
  function($scope,ItemsFactory){
    ItemsFactory.getItems().then(function (data) {
         $scope.items = data;
    });
}]);

谢谢你的回答,对回电和承诺感到困惑。使用
$http
承诺更清晰谢谢你的回答,对回电和承诺感到困惑。使用
$http
承诺更清晰我可以看到你在说什么,并可以将其缩短为<代码>返回$http.get('js/data/data.min.json')我知道你在说什么,可以把它缩短为<代码>返回$http.get('js/data/data.min.json')谢谢你的回答,结合你和@Robert Moskal的理解。我也试过了,工作正常,帮助我理解了整个回调和承诺。谢谢你的回答,结合你和@Robert Moskal的意思。我也尝试过,工作正常,帮助我理解整个回调和承诺。