我很難理解如何在由$ interval調用的函數內處理值賦值。
鑑於以下代碼:
this.value = null;
this.setSelection = function() {
this.value = Math.floor(Math.random()*11);
};
this.isSelected = function(item) {
if(this.value === item) {
return "selected";
}
};
如果我打電話以這種方式$interval(this.setSelection, 2000);
函數被稱爲所定義的間隔中的爲setSelection,但是所分配的值的範圍似乎是,使得實際this.value
沒有改變,當摘要調用isSelected
時,值仍然是null
。
但是,如果我直接調用該函數(如不正確的形式)$interval(this.setSelection(), 2000);
值正確更新並且摘要運行isSelected
它會識別新值。很明顯,由於$interval
預計會有函數參考,因此間隔不會再次運行。
我也試過在匿名函數中包裝函數調用,但是這導致了一個錯誤,指出函數未定義。
所以我的問題是,爲什麼當我的函數被$ interval正確調用,我得到這個意外的結果?
有趣。我認爲
this
應該在上下文中,因爲$ interval是一個角函數,它在控制器內使用$ this調用一個函數。如果函數調用是從摘要產生的,還是以明確的方式綁定,那麼「this」只會在上下文中出現? – msg45f 2015-04-05 09:43:02@ msg45f這與角度或摘要無關。這是一個JavaScript的東西。 'this'指的是封閉範圍,當你傳遞一個函數需要的方法時,對象的上下文將會丟失,並且你會得到一個獨立的函數,其中'this'意味着不同的東西。 – Sulthan 2015-04-05 10:38:41
我明白了。我的困惑之源是,在一個單獨的控制器中,'ng-click'調用的方法在上下文中具有this,當它不是由'$ interval'調用的時候,我不確定出了什麼問題。 – msg45f 2015-04-05 10:50:11