2016-03-29 5 views
0

Die controller.js Datei wird alsUpdate-Wert innerhalb Winkel js Funktion

gegeben
function XYZController($rootScope,$scope){ 
    var vm = this; 
    vm.a = 0; 
    var change = function(data){ 
     data.forEach(function(e,i){ 
      vm.a+=Number(e.value); 
     }); 
    } 
    $log.log(vm.a); 
} 

Der Funktionswechsel genannt wird, aber der $ log.log (a) druckt 0, statt dem aktualisierten sum.How zu nimm den aktualisierten Wert von vm.a Wenn ich $ scope. $ apply mache, erhalte ich den Fehler "$ digest is already in progress".

+1

Wie nennt man 'change'? Bitte posten Sie alle relevanten Codes. – GolfWolf

+0

Wenn Sie ng-click verwenden, müssen Sie $ apply nicht aufrufen. –

Antwort

2

Sie rufen $log.log(vm.a); vor dem Aufruf change(), daher protokolliert es Ihre vm.a = 0;, wenn Sie Ihren Code ändern, sollte es funktionieren.

function XYZController($rootScope,$scope){ 
    var vm = this; 
    vm.a = 0; 
    var change = function(data){ 
     data.forEach(function(e,i){ 
      vm.a+=Number(e.value); 
     }); 
     $log.log(vm.a); 
    } 
} 
+0

genau, Javascript ist synchron. –

+0

Der Wert wird geändert und ist auch außerhalb Ihrer Funktion verfügbar. Warum hast du angenommen, dass das nicht möglich wäre? –

+0

Danke, es hat sich geändert.Ich habe nur Zeit damit verschwendet, den aktualisierten Wert außerhalb der Funktion zu drucken, ohne zu prüfen, ob er sich tatsächlich geändert hat. – hakunamatata

0

Sie können $ log nicht vor dem Abschluss Ihrer Änderungsfunktion aufrufen, andernfalls wird nur 0 zurückgegeben.

Verwandte Themen