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

Javascript AngularJS中超时后没有更新数据,javascript,angularjs,data-binding,Javascript,Angularjs,Data Binding,我对AngularJS中的绑定有疑问。这是我的代码示例: .controller("user", function(){ this.test = 'hi!'; this.getCourseSeriesProducts = function(){ setTimeout(function(){ alert(this.test); this.test = 'bye'; alert

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

.controller("user", function(){
    this.test = 'hi!';
    this.getCourseSeriesProducts = function(){          
        setTimeout(function(){
            alert(this.test);
            this.test = 'bye';
            alert(this.test);
        },3000);
    }
});
问题是,在
setTimeout
之后的第一个警报中,结果未定义,但理论上应该有“hi!”价值因此,当我将结果更改为“再见”时,屏幕上的值不会更改,仍然是“嗨!”。发生了什么事?

请参见下面的演示, 使用$timeout代替setTimeout,您需要调用函数来执行它

var-app=angular.module('app',[]);
app.controller('homeCtrl',函数($scope,$timeout){
var测试='hi!';
this.getCourseSeriesProducts=函数(){
$timeout(函数(){
警报(测试);
测试=‘再见’;
警报(测试);
}, 300);
}
这个.getCourseSeriesProducts();
});

使用此关键字时要小心。在你的职责范围内 this.getCourseSeriesProducts,上下文已更改,因此这与首次定义this.test时引用的上下文不同。
我建议放一些console.log(这个)来理解。

好的,我理解你的意思,但我不知道如何在timeout函数中更改这个值。好的!我得到了它!只需在函数末尾写入
.bind(this)
。谢谢@komo