Ich habe diesen einfachen Code-Schnipsel:
HTML:
<div ng-app="myApp" ng-controller="SampleController">
<p>{{val1}}</p>
<p>{{val2}}</p>
<input type="button" value="Update" ng-click="update()" />
</div>
Javascript:
var app = angular.module('myApp', []);
app.controller('SampleController', ['$scope', function($scope) {
$scope.val1 = "Not updated";
$scope.val2 = "Not updated";
$scope.update = function() {
$scope.val1 = "Updated outside!";
setTimeout(function() {
$scope.val2 = "Update inside!";
}, 1);
};
}]);
Snippet auch in jsfiddle.
Wenn ich in die Update-Taste klicke, wird nur der Wert val1 im HTML aktualisiert. Wie behebt man das? Aber am wichtigsten, warum passiert das?
PS: setTimeout ist nur eine Vereinfachung des Problems. Tatsächlich handelt es sich um benutzerdefinierte Komponenten mit Rückruffunktionen.
Schön, aber wenn ich verwende etwas anderes, wie jQuery.ajax.success oder http.get $. Oder etwas, dass es kein angreifen (wie '$ timeout') von angularjs gibt? –
Nun, 'http.get' wird einen Digest-Zyklus auslösen - also sicher dort. Grundsätzlich löst alles außerhalb von eckigen Modulen den Zyklus nicht aus, daher müssen Sie es mit Hacks umgehen oder ein eigenes eckiges Modul schreiben. – tymeJV
Gibt es irgendwie einen 'Digest-Zyklus' zu benachrichtigen, dass eine Bereichsänderung vorgenommen wurde? –