angularjs变量不在控制器中更新

时间:2018-04-06 06:00:11

标签: angularjs

我需要在控件的几个部分使用这个变量,但是为了使数据库数据不受欢迎,变量仍然是空的。

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

2 个答案:

答案 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
 })