2013-03-01 11 views
157

chcę zrobić tak:Czy w ng-hide/ng-show można używać złożonych wyrażeń?

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

ale wyrażenie zawsze false.

Nie chcę definiować specjalnej funkcji na $scope.

+1

Ta składnia działa dla mnie i często jej używam. Jeśli ocenia wartość "false", możesz dwukrotnie sprawdzić te wartości. Możliwe, że obiekty "globalne" i/lub "odwzorowujące" są "niezdefiniowane" – derrylwc

+0

Przeczytaj mój komentarz poniżej odpowiedzi. – Paul

+0

tylko podpowiedź - jeśli zamiast tego używasz metody kontrolera, możesz przejść przez proces sprawdzania w debugerze! –

Odpowiedz

195

Użyj metody kontrolera, jeśli potrzebujesz uruchomić dowolny kod JavaScript lub możesz zdefiniować filtr, który zwrócił wartość true lub false.

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

+4

Masz rację. Problem polegał na tym, że flaga isAdmin miała typ "string", a nie "boolean". – Paul

109

ng-show/ng-hide przyjmuje tylko wartości boolean.

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

Poniżej jeden działa (To nie jest bardzo skomplikowane wyrażenie)

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

Tutaj element będzie pokazany w interfejsie, gdy którykolwiek z powrotem dwa stan prawdą (lub pracy).

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

11

To zadziała, jeśli nie masz zbyt wielu wyrażeń.

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

o więcej niż ekspresji tego zastosowania sterownika.

+1

Nie sądzę, aby twoje oświadczenie było poprawne: 'To zadziała, jeśli nie masz zbyt wielu wyrażeń. Chociaż zgadzam się, że powinno to być zrobione w kontrolerze. –

6

Generalnie staram się unikać wyrażeń za pomocą ng-show i ng-hide, ponieważ zostały zaprojektowane jako wartości logiczne, a nie warunkowe. Jeśli potrzebuję zarówno logiki warunkowej, jak i logiki Boolowskiej, wolę umieścić logikę warunkową, używając ng-if jako pierwszego sprawdzenia, a następnie dodać dodatkową kontrolę logiki logicznej z ng-show i ng-ukryć

Howerver, jeśli chcesz użyć warunku dla ng-show lub ng-hide, tutaj jest link z kilkoma przykładami: Conditional Display using ng-if, ng-show, ng-hide, ng-include, ng-switch

2

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

ng-show="column != 'vendorid' && column !='billingMonth'" 
Powiązane problemy