Czy możliwe są złożone wyrażenia w ng-hide / ng-show?


180

Chcę to zrobić:

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

ale wyrażenie zawsze ocenia false.

Nie chcę definiować funkcji specjalnej $scope.


1
Ta składnia działa dla mnie i używam jej często. Jeśli ma wartość false, możesz ponownie sprawdzić te wartości. Możliwe, że obiektami „globalnymi” i / lub „odwzorowującymi” sąundefined
derrylwc

Przeczytaj mój komentarz poniżej odpowiedzi.
Paul

tylko podpowiedź - jeśli zamiast tego użyjesz metody kontrolera, możesz faktycznie przejść przez proces oceny w debuggerze!
Dimitry K

Odpowiedzi:


212

Użyj metody kontrolera, jeśli chcesz uruchomić dowolny kod JavaScript lub możesz zdefiniować filtr, który zwróci wartość prawda lub fałsz.

Właśnie przetestowałem (powinienem to zrobić najpierw) i coś takiego ng-show="!a && b"działało zgodnie z oczekiwaniami.


4
Masz rację. Problem polegał na tym, że flaga isAdmin była typu „string” zamiast „boolean”.
Paul

121

ng-show/ ng-hideakceptuje tylko booleanwartości.

W przypadku złożonych wyrażeń dobrze jest użyć kontrolera i zakresu, aby uniknąć komplikacji.

Poniżej jeden będzie działał (To nie jest bardzo złożone wyrażenie)

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

Tutaj element będzie wyświetlany w interfejsie użytkownika, gdy którykolwiek z dwóch warunków zwróci wartość true (operacja LUB).

W ten sposób możesz użyć dowolnych wyrażeń.


12

Działa to, jeśli nie masz zbyt wielu wyrażeń.

Przykład: ng-show="form.type === 'Limited Company' || form.type === 'Limited Partnership'"

Aby uzyskać więcej wyrażeń niż to, użyj kontrolera.


1
Nie sądzę, aby twoje oświadczenie było poprawne: This will work if you do not have too many expressions.chociaż zgadzam się, że powinno to być zrobione w kontrolerze.
Rahul Desai

7

Generalnie staram się unikać wyrażeń za pomocą ng-show i ng-hide, ponieważ zostały one zaprojektowane jako booleany, a nie warunkowe. Jeśli potrzebuję zarówno logiki warunkowej, jak i logicznej, wolę wprowadzić logikę warunkową, używając ng-if jako pierwszej kontroli, a następnie dodać dodatkowe sprawdzenie logiki logicznej za pomocą ng-show i ng-hide

Jednak jeśli chcesz użyć warunkowego dla ng-show lub ng-hide, oto link z kilkoma przykładami: Wyświetlanie warunkowe za pomocą ng-if, ng-show, ng-hide, ng-include, ng-switch


2

Niektóre z powyższych odpowiedzi nie działały dla mnie, ale tak się stało. Na wypadek, gdyby ktoś miał ten sam problem.

ng-show="column != 'vendorid' && column !='billingMonth'"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.