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.

Paulo
fonte
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.

Mark Rajcok
fonte
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.

myaseedk
fonte
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.

lvadim01
fonte
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

James Drinkard
fonte
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'"
Deathstalker
fonte