“控制器为”未更新绑定

时间:2017-01-30 20:33:49

标签: angularjs

老实说,我不知道为什么这不起作用。它应该工作。

https://jsfiddle.net/4utpnsh9/

HTML

<div ng-app="app" ng-controller="IndexController as vm">
    <span>{{vm.Timer}}</span>
</div>

$interval(function() {
    this.Timer = Math.round(new Date().getTime() / 1000.0);
}, 1000);

this.Timer更新时,它不会在视图中更新。虽然我console.log()但它确实如此。如果我删除了vm.Timer并简单地将其Timer并将其应用于$scope而不是this,那么它可以完美运行,正如您自己可以看到的那样:{{3} }

我已经在另一个堆栈上多次完成了这个,但由于某种原因,我无法弄清楚为什么它不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:5)

因为this不是您认为的! this正在改变区间回调中的上下文。使用箭头功能,或设置一些上下文!

$interval(() => {
    this.Timer = Math.round(new Date().getTime() / 1000.0);
}, 1000);

或者

$interval(function() {
    this.Timer = Math.round(new Date().getTime() / 1000.0);
}.bind(this), 1000);