La función del controlador es llamada dos veces usando ng-show
Tengo una configuración de aplicación Angular muy simple, el siguiente código:
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>
Yapp.js
var app = angular.module('app', []);
app.controller('MyCtrl', function($scope) {
console.log("MyCtrl called")
$scope.ready = function() {
console.log("ready called");
return true;
}
})
Si ejecuta esto con su consola abierta veráMyCtrl llama una vez ylisto llamado dos veces. He pasado horas tratando de resolver esto, no veo ninguna razón por la que$scope.ready
Se llamaría cualquier cosa, pero exactamente una vez.
Si usas un Angular v1.1.5 y usasng-if
en lugar deng-show
Tendrás el mismo comportamiento, pero si usasng-init
llama correctamente$scope.ready
una vez. En mi caso necesitaréng-show
ong-if
.
Plunkr:http://plnkr.co/edit/ZSwVNLeFSuhbouXZu9SM?p=preview
Aclaración: Para elaborar sobre lo que estoy apuntando, digamos$scope.ready
en algún momento vuelve luegofalse
(Tal vez haga una llamada AJAX, que NO debería ser llamada más de una vez), me gustaría que "algún contenido" ya no esté visible. Es decir, comportamiento dinámico basado en el resultado de$scope.ready
.
¿Algunas ideas? ¡Gracias por la ayuda!