AngularJS: classe ng condicional com uma função que dispara quantidades ridículas
Eu verifiquei perguntas e respostas semelhantes, mas elas não resolveram o meu problema.
Quero definir dinamicamente a classe de uma entrada, considere o seguintePlunkr.
Como você pode ver, eu tenho um campo, definido assim:
<input type="text" ng-model="Person.Name" ng-class="{'mandatory': IsFieldMandatory('Name')}" />
Essa função tem o seguinte código:
self.IsFieldMandatory = function(field){
var isMandatory = true;
var value = $scope.Person.Name;
$scope.Cnt = $scope.Cnt + 1;
return value.length == 0;
}
Como você pode ver, ele dispara 11 (!) Vezes em um carregamento de página (ou qualquer outra ação como desfoque).
PS: A função não funciona porque recebo este erro:
Error: $rootScope:infdig Infinite $digest Loop
Isso ocorre devido ao incremento $ scope.Cnt. Se colocado em comentário, ele funciona (mas não sei o número de gatilhos).
PPS:
Como posso usar isso ?:
var value = $parse('Person.' + field);
Isso seria melhor porque então a função funcionaria para qualquer campo. Do que precisa, no cenário do mundo real. (isso retorna uma função, não um valor real)
Valeu!
ATUALIZAR
O exemplo do Plunkr não parece ser valioso; portanto, a função original:
self.IsMandatory = function (field) {
console.log('test');
if (self.IsMandatoryFieldsLoaded == true) {
var idxAsync = self.MandatoryFields.indexOf(field);
return idxAsync > -1;
}
return false;
}
Como você pode ver, não faço modificações, apenas lê. Eu tenho 11 campos, mas o log de 'teste' dessa função é gravado 198 vezes!