Funkcja kontrolera jest wywoływana dwukrotnie za pomocą ng-show

Mam bardzo prostą konfigurację aplikacji Angular, kod w następujący sposób:

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>

Iapp.js

var app = angular.module('app', []);

app.controller('MyCtrl', function($scope) {
  console.log("MyCtrl called")
  $scope.ready = function() {
    console.log("ready called");
    return true;
  }
})

Jeśli uruchomisz to przy otwartej konsoli, zobaczyszZadzwonił MyCtrl raz igotowe wezwanie dwa razy. Spędziłem godziny próbując to zrozumieć, nie widzę powodu, dla którego$scope.ready nazywano by to tylko dokładnie jeden raz.

Jeśli używasz Angular v1.1.5 i używaszng-if zamiastng-show będziesz miał to samo zachowanie, ale jeśli użyjeszng-init poprawnie nawiązuje połączenie$scope.ready jeden raz. W moim przypadku będę potrzebowałng-show lubng-if.

Plunkr:http://plnkr.co/edit/ZSwVNLeFSuhbouXZu9SM?p=preview

Wyjaśnienie: Aby rozwinąć to, do czego dążę, powiedzmy$scope.ready w pewnym momencie później powracafalse (być może wywołanie AJAX, które NIE powinno być wywoływane więcej niż raz), chciałbym, aby „Niektóre treści” nie były już widoczne. Oznacza to dynamiczne zachowanie oparte na wyniku$scope.ready.

Jakieś pomysły? Dziękuję za pomoc!

Dla porządkuto ito nie są tym samym problemem.

questionAnswers(2)

yourAnswerToTheQuestion