Die Controller-Funktion wird zweimal mit ng-show aufgerufen
Ich habe ein sehr einfaches Angular-App-Setup, Code wie folgt:
index.html
<!DOCTYPE html>
<html>
<head>
<script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js'></script>
<script src='app.js'></script>
</head>
<body ng-app="app">
<div ng-controller="MyCtrl">
<div ng-show="ready()">
Some content
</div>
</div>
</body>
</html>
Undapp.js
var app = angular.module('app', []);
app.controller('MyCtrl', function($scope) {
console.log("MyCtrl called")
$scope.ready = function() {
console.log("ready called");
return true;
}
})
Wenn Sie dies bei geöffneter Konsole ausführen, wird angezeigtMyCtrl hat angerufen einmal undfertig angerufen zweimal. Ich habe Stunden damit verbracht, dies herauszufinden, ich sehe keinen Grund warum$scope.ready
würde alles andere als genau einmal genannt werden.
Wenn Sie einen Angular v1.1.5 verwenden und verwendenng-if
anstattng-show
Sie werden das gleiche Verhalten haben, aber wenn Sie verwendenng-init
es ruft richtig auf$scope.ready
einmal. In meinem Fall werde ich brauchenng-show
oderng-if
.
Plunkr:http://plnkr.co/edit/ZSwVNLeFSuhbouXZu9SM?p=preview
Klärung: Sagen wir, um zu erläutern, was ich anstrebe$scope.ready
Irgendwann später zurückfalse
(Vielleicht führt es einen AJAX-Aufruf durch, der NICHT mehrmals aufgerufen werden sollte.) Ich möchte, dass "Einige Inhalte" nicht mehr sichtbar sind. Das heißt, dynamisches Verhalten basiert auf dem Ergebnis von$scope.ready
.
Irgendwelche Ideen? Danke für die Hilfe!
Für die Aufzeichnungdiese unddiese sind nicht das gleiche problem.