Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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,我将其注入控制器模块: var services = angular.module('services', []); services.factory('jsonManager', ['$http', function($http) { return{ loadData: loadData } function loadData(){ $http({ method: 'GET', url: 'data/2015_data.json' }).then(funct

我将其注入控制器模块:

var services = angular.module('services', []);

services.factory('jsonManager', ['$http', function($http) {

return{
  loadData: loadData
}

function loadData(){
   $http({
     method: 'GET',
     url: 'data/2015_data.json'
}).then(function successCallback(response) {
    return response.data;
  }, function errorCallback(response) {
    return response.err;
  });
}

}]);
。。。但它不起作用!我在控制器上使用它,如下所示:

var ctrls = angular.module('controllers', ['services']);

ctrls.controller('overviewController', ['jsonManager', '$scope', 

function(jsonManager, $scope){

$scope.load = function(){
  var datos = jsonManager.loadData();
  console.log(datos);
  $scope.gastos = datos.gastos.data;
  $scope.ganancias = datos.ganancias.data;


}

我省略了控制器中的一些代码;作用域对象工作正常。问题是,我得到一个错误,告诉我“datos”在第55行和第56行没有定义。为什么会发生这种情况?

$http是异步的,并且

console.log(datos);
$scope.gastos = datos.gastos.data;
在jsonManager.loadData()之前运行;返回它的值

使用回扣或承诺

function loadData(callback){
   $http({
     method: 'GET',
     url: 'data/2015_data.json'
}).then(function successCallback(response) {
    callback(null, response.data);
  }, callback);
}

$scope.load = function(){
  var datos = jsonManager.loadData(function(err, datos){
    console.log(datos);
    $scope.gastos = datos.gastos.data;
    $scope.ganancias = datos.ganancias.data;
  });
}

它是异步的,因此一种方法是强制在$scope.load中解析它,如下所示:

$scope.load = function(){
  var datos = jsonManager.loadData().then(function(results){return results;});
  console.log(datos);
  $scope.gastos = datos.gastos.data;
  $scope.ganancias = datos.ganancias.data;

$http
服务返回一个承诺,因此您需要使用
then(successCallback,errorCallback)
来解析该承诺

服务

var services = angular.module('services', []);
services.factory('jsonManager', ['$http', function($http) {
    var loadData = function(){
        $http({
            method: 'GET',
            url: 'data/2015_data.json'
        });
    return {
        loadData: loadData
    };
}]);
控制器

var ctrls = angular.module('controllers', ['services']);
ctrls.controller('overviewController', ['jsonManager', '$scope', function(jsonManager, $scope){
    $scope.load = function(){
        var datos = jsonManager.loadData().then(function(res) {
            console.log(res.data);
            $scope.gastos = res.data.gastos.data;
            $scope.ganancias = res.data.ganancias.data;
        }, function(err) {
            console.log(err);
        });
    };
}]);

您没有从
loadData()
返回任何内容,而是尝试从异步调用返回。检查此线程这对我不起作用。。。一直说“datos未定义”@Zerok在回调函数中丢失错误