Wenn ich eine Ansicht lade, möchte ich einen Initialisierungscode in dem zugehörigen Controller ausführen.
Zu diesem Zweck habe ich die ng-init-Direktive für das Hauptelement meiner Ansicht verwendet:
<div ng-init="init()">
blah
</div>
und in der Steuerung:
$scope.init = function () {
if ($routeParams.Id) {
//get an existing object
});
} else {
//create a new object
}
$scope.isSaving = false;
}
Erste Frage: Ist das der richtige Weg?
Als nächstes habe ich ein Problem mit der Abfolge der Ereignisse. In der Ansicht habe ich eine Schaltfläche "Speichern", die die ng-disabled
Direktive als solche verwendet:
<button ng-click="save()" ng-disabled="isClean()">Save</button>
Die isClean()
Funktion ist in der Steuerung definiert:
$scope.isClean = function () {
return $scope.hasChanges() && !$scope.isSaving;
}
Wie Sie sehen können, wird das $scope.isSaving
Flag verwendet, das in der init()
Funktion initialisiert wurde .
Problem: Wenn die Ansicht geladen wird, wird die isClean Funktion aufgerufen , bevor die init()
Funktion, damit das Flag isSaving
ist undefined
. Was kann ich tun, um das zu verhindern?