我需要在控件的几个部分使用这个变量,但是为了使数据库数据不受欢迎,变量仍然是空的。
var _user = null
configApp.dados().query(function (data) {
_user = data;
console.log('test:', _vuser) //ok load
})
console.log('test:', _vuser) //empty
更新
var _user = null
configApp.dados().query(function (data) {
_user = data;
console.log('test:', _user) //ok load
})
console.log('test:', _user) //empty
答案 0 :(得分:0)
我假设你在谈论_user变量。 因此,如果你是console.log _vuser变量,它应该是空的,因为你从未声明过这个变量。我认为你正在寻找_user,因为那是从查询中获取数据的那个。 因此,console.log应该是这样的:
console.log('test:',_ user)
<强>更新强>
如果我理解正确,你应该这样做:
var _user = null
configApp.dados().query(function (data) {
_user = data;
console.log('test:', _user) //ok load
// continue your controller code that you want to use this _user data form here
})
//console.log('test:', _user) //empty
这是因为它在第一个实际获取数据的控制台之前执行第二个console.log,因为它已经等待查询响应。
答案 1 :(得分:0)
<强>问题:强>
在任何javascript中,代码从上到下执行。
因此,在您的情况下,第一个console.log
位于查询函数中,因此仅当您从api
<获得响应时才会调用 /强>
在console.log
给出结果之前,第二个api
会被调用,因为代码会从上到下继续执行。
更具体地说,请将console.log
更改为以下内容:
var _user = null
configApp.dados().query(function (data) {
_user = data;
console.log('test:', _user) //ok load
console.log('loaded second after you got data') //ok load
})
console.log('loaded first before you get data') //ok load
console.log('test:', _user) //empty
从上面的代码中得出结果:
1) loaded first before you get data
2) test:, undefined/null
3) 'test:', _user data
4) loaded second after you got data
<强>解决方案:强>
为了在控件中的每个位置使用该变量,标记为angularjs
,您可以使用$scope.user
代替_user
代码将是:
$scope.user = null
configApp.dados().query(function (data) {
$scope.user = data;
console.log('test:', $scope.user) //ok load
})