AngularJs变量范围outisde函数

时间:2016-10-22 19:40:05

标签: javascript angularjs socket.io

我使用socket获取数据到angularJS控制器。

$rootScope.list1= '';
socket.emit('ticker', symbol);
socket.on('quote', function(data) {
    $rootScope.list1 = angular.fromJson(data.substring(3));
//I can't call any function from here to use this variable
});

我想在下面的代码中使用更新的list1变量,但我无法将其值作为''。 这可能是因为我试图在更新之前,即在收到响应之前,在我的脚本中访问它。

有没有办法可以在下面的代码中使用变量list1的更新值。

编辑1

正如@Manish Singh在其中一个答案中所建议的那样,我尝试了$ rootScope.watch.It反映了上面代码的新价值,但不代表下面给出的代码。

$rootScope.peers = [];
industrysearch.searchindustry(indussymbol).then(function(results) {
  industrysearch.searchpeers($scope.industrystock[0]._source.industry).then(function(results1) {
            for (var number_stocks = 0; number_stocks < results1.length; number_stocks++) {
                $rootScope.peers.push(results1[number_stocks]);
            }
        });
    });
    $rootScope.$watch('peers', function(newVal1, oldVal1) {
      console.log(newVal1); //prints []
    });

一个是正常变量,一个用作数组。我可以看到任何其他差异。

编辑2

$ watchCollection用于我错过的数组/集合。下面的代码正在运行。

$rootScope.$watchCollection('peers', function(newVal1, oldVal1) {
      console.log(newVal1);
    }); 

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如何在$ rootScope上使用手表

$rootScope.$watch('list1', function(newVal, oldVal) {
//Do Something 
)};

答案 1 :(得分:0)

尝试“$ applyAsync”:

$rootScope.list1= '';
socket.emit('ticker', symbol);
socket.on('quote', function(data) {
    $rootScope.$applyAsync(function(){
       $rootScope.list1 = angular.fromJson(data.substring(3));
    });
});