Função de controlador sendo chamada duas vezes usando ng-show
Eu tenho uma configuração de aplicativo Angular muito simples, codifique da seguinte maneira:
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>
Eapp.js
var app = angular.module('app', []);
app.controller('MyCtrl', function($scope) {
console.log("MyCtrl called")
$scope.ready = function() {
console.log("ready called");
return true;
}
})
Se você executar isso com o seu console aberto, você veráMyCtrl ligou uma vez epronto chamado duas vezes. Eu passei horas tentando descobrir isso, não vejo razão para$scope.ready
Seria chamado de qualquer coisa, mas exatamente uma vez.
Se você usa um Angular v1.1.5 e usang-if
ao invés deng-show
você terá o mesmo comportamento, mas se você usarng-init
ele chama corretamente$scope.ready
um tempo. No meu caso vou precisarng-show
oung-if
.
Plunkr:http://plnkr.co/edit/ZSwVNLeFSuhbouXZu9SM?p=preview
Esclarecimento: Para elaborar sobre o que eu estou apontando, digamos$scope.ready
em algum momento depois retornafalse
(talvez faça uma chamada AJAX, que NÃO deve ser chamada mais de uma vez), eu gostaria que "Some content" não ficasse mais visível. Ou seja, comportamento dinâmico baseado no resultado de$scope.ready
.
Alguma ideia? Obrigado pela ajuda!