我对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!'。发生了什么事?
答案 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;