Kiedy ładuję widok, chciałbym uruchomić kod inicjujący w skojarzonym z nim kontrolerze.
Aby to zrobić, użyłem dyrektywy ng-init w głównym elemencie mojego poglądu:
<div ng-init="init()">
blah
</div>
aw kontrolerze:
$scope.init = function () {
if ($routeParams.Id) {
//get an existing object
});
} else {
//create a new object
}
$scope.isSaving = false;
}
Pierwsze pytanie: czy to właściwy sposób?
Następnie mam problem z kolejnością zachodzących wydarzeń. W widoku mam przycisk „zapisz”, który używa ng-disabled
dyrektywy jako takiej:
<button ng-click="save()" ng-disabled="isClean()">Save</button>
isClean()
funkcja jest określona w sterowniku:
$scope.isClean = function () {
return $scope.hasChanges() && !$scope.isSaving;
}
Jak widać, używa $scope.isSaving
flagi, która została zainicjowana w init()
funkcji.
PROBLEM: gdy widok jest załadowany, funkcja isClean nazywa się przed tym init()
funkcji, stąd flaga isSaving
jest undefined
. Co mogę zrobić, aby temu zapobiec?