2017-01-30 57 views
0

我真的不知道为什么这不起作用。它应该工作。“Controller as”没有更新绑定

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,它完美的作品,因为你可以看到自己:https://jsfiddle.net/4utpnsh9/1/

我已经这样做了多次的另一叠不止这一个,但出于某种原因,我无法弄清楚为什么它不起作用。我究竟做错了什么?

回答

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); 
+0

Aaahhh该死!我习惯了打字稿,所以当我回到古代的东西时,我忘记了所有的打击!非常感谢,伙计哈哈。 – MortenMoulder

+1

@MortenMoulder - 在TypeScript之后回到普通的JS就像拥有一栋房子后回到你的大学宿舍:) - 总是乐于帮助 – tymeJV

+0

哈哈这是一个很好的比喻!再次感谢 :) – MortenMoulder