São possíveis expressões complexas no ng-hide / ng-show?


180

Eu quero fazer isso:

ng-hide="!globals.isAdmin && mapping.is_default"

mas a expressão sempre avalia para false.

Eu não quero definir uma função especial $scope.


1
Essa sintaxe funciona para mim e eu a uso com frequência. Se estiver avaliando false, convém verificar esses valores. É possível que os objetos "globais" e / ou " undefined
mapeados

Leia meu comentário abaixo da resposta.
Paul

apenas uma dica - se você usar o método controller, poderá realmente percorrer a avaliação no depurador!
precisa

Respostas:


212

Use um método de controlador se precisar executar um código JavaScript arbitrário ou se pode definir um filtro que retorne verdadeiro ou falso.

Acabei de testar (deveria ter feito isso primeiro) e algo como ng-show="!a && b"funcionou como esperado.


4
Você está certo. O problema era que o sinalizador isAdmin era do tipo 'string' em vez de 'boolean'.
Paulo

121

ng-show/ ng-hideaceita apenas booleanvalores.

Para expressões complexas, é bom usar o controlador e o escopo para evitar complicações.

Abaixo um funcionará (não é uma expressão muito complexa)

ng-show="User=='admin' || User=='teacher'"

Aqui, o elemento será mostrado na interface do usuário quando qualquer uma das duas condições retornar verdadeira (operação OR).

Assim você pode usar qualquer expressão.


12

Isso funcionará se você não tiver muitas expressões.

Exemplo: ng-show="form.type === 'Limited Company' || form.type === 'Limited Partnership'"

Para mais expressões além desta, use um controlador.


1
Não acho que sua afirmação esteja correta: This will work if you do not have too many expressions.embora eu concorde que ela deva ser feita no controlador.
Rahul Desai

7

Geralmente, tento evitar expressões com ng-show e ng-hide, pois elas foram projetadas como booleanas, não condicionais. Se eu precisar de lógica condicional e booleana, prefiro inserir a lógica condicional usando ng-if como a primeira verificação e adicionar uma verificação adicional para a lógica booleana com ng-show e ng-hide

No entanto, se você deseja usar uma condicional para ng-show ou ng-hide, aqui está um link com alguns exemplos: Exibição condicional usando ng-if, ng-show, ng-hide, ng-include, ng-switch


2

Algumas dessas respostas acima não funcionaram para mim, mas funcionaram. Apenas no caso de alguém ter o mesmo problema.

ng-show="column != 'vendorid' && column !='billingMonth'"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.