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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage