2017-04-09 3 views
0

Ich möchte submit-Taste während des Speicherns deaktivieren und aktivieren Sie nach dem Speichern.2-Wege-Bindung funktioniert nicht in SetTimeout Callback in Winkel 1

Es ist nicht aktiviert. Ich kann sehen, dass sich die Flagge geändert hat. Aber die Flagge auf der view wird nicht aktualisiert, wie ich mir vorstellen würde 2-Wege-Bindung sollte mir das geben.

Der Code wie unten

$scope.save = function(){ 
    $scope.saving_survey = true; 
    setTimeout(function(){ 
     $scope.saving_survey = false; 
     console.log($scope.saving_survey); 
    }, 1000); 

} 


<button class="btn btn-success" ng-click="save()" ng-disabled="saving_survey"> 
    save {{saving_survey}} 
</button> 
+0

'setTimeout' verändert Umfang außerhalb des Winkel Kontext. ..daher gibt es einen '$ timeout'-Dienst in angular, der setTimeout umschließt und $ apply aufruft, um einen Digest der Ansicht auszuführen – charlietfl

Antwort

0

Try Verwendung $timeout Service. es sollte INJECTE sein

$scope.save = function(){ 
    $scope.saving_survey = true; 
    $timeout(function(){ 
    $scope.saving_survey = false; 
    console.log($scope.saving_survey); 
    }, 1000); 
} 
0

Grundsätzlich an die Steuerung Standard JavaScript-Funktionen (SetTimeout, Intervall, eventlistener, usw.) haben Wrapper $ nicht beobachten. Also müssen Sie $ watch manuell auslösen, dafür müssen Sie $scope.$apply() aufrufen. Der beste Weg, $apply des Aufrufs unten gezeigt,

if(!$scope.$$phase) { 
    $scope.$apply(); 
} 

Hinweis: $$phase true zurück, wenn bereits laufenden Zyklus verdauen sonst es wird falsch sein

Verwandte Themen