2017-08-28 216 views
1

而在控制檯我們看到它改變了嗎? http://jsfiddle.net/LCZfd/1006/Angularjs變量不會改變

app.controller("myCtrl", function($document) { 
    let scope=this; 
    this.current=0; 

    this.isCurrent=function(val){ 
     return val==this.current; 
    } 
    this.selectCurrent=function(val){ 
     this.current=val; 
    } 
    $document.on('keypress', keyupHandler); 
    function keyupHandler(keyEvent) { 
     scope.selectCurrent(keyEvent.key-1); 
     console.log(scope.current); 
    } 
}); 

打開控制檯,你會看到變量改變了它的價值。我只想在我的應用程序中使用鍵盤。

+0

什麼是你想達到這個scope.selectCurrent(keyEvent.key-1);鍵是一個屬性,它返回一個字母表,你正在從它減去1? – Thalaivar

+0

這裏的小麻煩'返回val == this.current;',這個上下文中的'this'屬於函數'isCurrent'而不是它自己的控制器,你可以使用緩存變量'scope'就像'return val == scope .current;'而是。 –

+0

你的代碼似乎產生了關於模塊的警告,也許這是它不起作用的原因 – Kaddath

回答

1

這很簡單,但我已經忘記了。如果您使用角度刷新週期外部的事件,則不會應用它。這將以這種方式工作,但不建議這樣做,因爲如果您在消化循環中嘗試應用,則會導致錯誤。你應該閱讀的文檔,以找到一個解決辦法留在角邊界:

app.controller("myCtrl", function($document, $rootScope) { 
    let scope=this; 
    this.current=0; 

    this.isCurrent=function(val){ 
     return val==this.current; 
    } 
    this.selectCurrent=function(val){ 
     this.current=val; 
    } 
    $document.on('keypress', keyupHandler); 
    function keyupHandler(keyEvent) { 
     //the apply: 
     $rootScope.$apply(scope.selectCurrent(keyEvent.key-1)); 
     console.log(scope.current); 
    } 
});