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在回调函数中丢失错误