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!