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.

Paweł
źródło
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.

Mark Rajcok
źródło
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ń.

myaseedk
źródło
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.

lvadim01
źródło
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

James Drinkard
źródło
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'"
Deathstalker
źródło