Javascript angular$范围在angular controller中的de函数之外没有值

Javascript angular$范围在angular controller中的de函数之外没有值,javascript,angularjs,Javascript,Angularjs,导言: 我在$http方法中的返回值有问题,我了解如何在$http.post和$http.get方法中使用$http,我不能在调用工厂的函数之外返回值 我需要在控制器函数之外使用$scope.historias值。 我的角工厂: 第一工厂: mediperbaricapp.factory('listartratamintos',['http','location','q',', 函数($http、$location、$q){ var urlBase=host+'index.php/'; var

导言: 我在$http方法中的返回值有问题,我了解如何在$http.post和$http.get方法中使用$http,我不能在调用工厂的函数之外返回值

我需要在控制器函数之外使用$scope.historias值。

我的角工厂: 第一工厂:

mediperbaricapp.factory('listartratamintos',['http','location','q',',
函数($http、$location、$q){
var urlBase=host+'index.php/';
var服务={};
log('DEBUG=entramos');
返回{
响应:功能(响应){
返回$http({
url:(urlBase+'trataminentos/gettrataminentos'),
方法:“获取”
})
}
}

}]);因此,在本部分中,您有一个回调函数,并尝试访问它下面代码中的值:

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数据;
setTimeout(函数(){
数据='我将不可用!';
}, 100);

警报(数据);//未定义
数据在那里,但您误解了结果
console.log
(或
.dir
)立即执行,它不会等待承诺兑现。一旦承诺完成,数据将在那里,但当您执行命令时它不在那里。您试图在数据从服务器返回之前将其记录到控制台…您不能这样做。Ajax是异步的谢谢!!函数myFunction(){console.dir($scope.datos);//with data}console.dir($scope.datos)//没有数据;:(不客气!是的,诀窍是在数据准备好后调用所有需要
datos
的代码,这就是函数调用所做的。这里有一个有趣的链接:这也很好:谢谢朋友XD,javascript。它每天都很复杂。我对languageNo问题的了解多一点。每个开始都很复杂,b但是继续努力,你会变得很擅长的。