在AngularJS中超时后没有更新数据

时间:2015-03-26 10:46:27

标签: javascript angularjs data-binding

我对AngularJS中的绑定存有疑问。这是我的代码示例:

.controller("user", function(){
    this.test = 'hi!';
    this.getCourseSeriesProducts = function(){          
        setTimeout(function(){
            alert(this.test);
            this.test = 'bye';
            alert(this.test);
        },3000);
    }
});

问题是,在setTimeout之后的第一个警报中,结果是未定义的,但理论上应该有'hi!'值。因此,当我将结果更改为警告'再见'时,屏幕上的值不会改变,仍然是'hi!'。发生了什么事?

2 个答案:

答案 0 :(得分:2)

小心使用this关键字。在你的功能 this.getCourseSeriesProducts,上下文已更改,因此不会引用与首次定义 this.test 时相同的上下文。 我建议把几个console.log(这个)理解。

答案 1 :(得分:0)

请参阅下面的演示, 使用angular $ timeout而不是setTimeout,你需要调用函数来执行它。



var app = angular.module('app', []);

app.controller('homeCtrl', function($scope, $timeout) {

  var test = 'hi!';

  this.getCourseSeriesProducts = function() {

    $timeout(function() {
      alert(test);
      test = 'bye';
      alert(test);
    }, 300);
  }

  this.getCourseSeriesProducts();


});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="homeCtrl">


  </div>
</div>
&#13;
&#13;
&#13;