介绍: 我在$ http方法中有一个问题返回值,我知道如何在$ http.post和$ http.get方法中运行$ http,我无法在调用我工厂的函数之外返回值。
我需要在控制器函数之外使用$ scope.historias值。
My Angular Factory: 第一工厂:
mediperbaricaApp.factory('listarTratamientos',['$http','$location','$q',
function($http, $location, $q){
var urlBase = host + 'index.php/';
var service = {};
console.log('DEBUG = entramos');
return {
response : function(response){
return $http({
url : (urlBase + 'tratamientos/getTratamientos'),
method : 'GET'
})
}
}
}]);
第二工厂:
mediperbaricaApp.factory('services', [ '$http' ,'$location', function(
$http, $location){
var urlBase = host + 'index.php/';
var service = {};
//listado de historias para el autocoplete del form
service.getHistorias = function(callback){
console.log('[DEBUG] FAC Listar Historias');
$http.get(urlBase + 'historias/getHistoria').
success(function(response){
return callback(response);
}).
error(function(response){
alert('Lo sentimos!, No se puede recuperar los datos, ' +
' intente mas tarde :(');
})
};
return service;
}]);
我的Angular Controller Controller,使用两个最后的工厂,我得到相同的结果
mediperbaricaApp.controller('editController',function($scope,listarTratamientos,
$location,$routeParams, services){
console.log('[DEBUG] CTRL editar tratamientos');
//use first factory
$scope.datos = {};
services.getHistorias(function(response){
$scope.datos = response.data; // output array with data :)
})
//the data no exist in this place.
console.dir($scope.datos); //$scope.datos lost data :(
//use second factory
$scope.midata = {};
listarTratamientos.response().success(function(data){
$scope.midata = data;
console.dir($scope.midata); // output array with data :)
});
//data not exist in this place i dont understand
console.dir($scope.midata); //$scope.datos lost data :(
谢谢你的帮助! ATT。爱德华
答案 0 :(得分:1)
所以在这部分你有一个回调函数,你试图访问它下面的代码中的值:
services.getHistorias(function(response){
$scope.datos = response.data; // output array with data :)
})
//the data no exist in this place.
console.dir($scope.datos); //$scope.datos lost data output undefined variable :(
问题是在此代码块之后稍微执行了回调函数,因此需要从该回调中调用您对该数据执行的所有操作,例如:
services.getHistorias(function(response){
$scope.datos = response.data; // output array with data :)
myFunction();
})
...
function myFunction() {
console.dir($scope.datos); //$scope.datos now available :)
}
您的其他代码块也是如此。
请记住关于回调/异步函数:只是因为一行代码正好在另一行代码下面 - 这并不意味着它们将按照该顺序执行。
我现在将向您展示两个非常简单的示例 - 一个错误的示例(就像您所做的那样),以及一个好的示例,使用setTimeout来模拟异步调用:
var data;
setTimeout(function() {
data = 'I will not be available!';
}, 100);
alert(data); // undefined
var data;
setTimeout(function() {
data = 'Que suerte!';
showAlert();
}, 100);
function showAlert(){
alert(data); // all good!
}