2013-03-01 11 views
157

voglio farlo:Le espressioni complesse sono possibili in ng-hide/ng-show?

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

ma l'espressione restituisce sempre false.

Non voglio definire la funzione speciale su $scope.

+1

Questa sintassi funziona per me e lo uso spesso. Se sta valutando 'false', potresti voler ricontrollare quei valori. È possibile che gli oggetti "globals" e/o "mapping" siano "indefiniti" – derrylwc

+0

Leggi il mio commento sotto la risposta. – Paul

+0

solo un suggerimento: se si utilizza invece il metodo controller, è possibile eseguire effettivamente la valutazione nel debugger! –

risposta

195

Utilizzare un metodo controller se è necessario eseguire codice JavaScript arbitrario oppure è possibile definire un filtro che restituisce true o false.

Ho appena testato (dovrebbe averlo fatto prima) e qualcosa come ng-show="!a && b" ha funzionato come previsto.

+4

Hai ragione. Il problema era che il flag isAdmin era di tipo "stringa" piuttosto che "booleano". – Paul

109

ng-show/ng-hide accetta solo boolean valori.

Per espressioni complesse è consigliabile utilizzare controller e scope per evitare complicazioni.

seguito si lavorerà (Non è un'espressione molto complessa)

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

Qui elemento verrà mostrato nella UI quando uno dei due condizione ritorno true (OR).

In questo modo è possibile utilizzare qualsiasi espressione.

11

Questo funzionerà se non si dispone di troppe espressioni.

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

Per qualsiasi più espressioni di questo uso di un controller.

+1

Non penso che la tua affermazione sia corretta: 'Funzionerà se non hai troppe espressioni. Anche se sono d'accordo che dovrebbe essere fatto nel controller. –

6

In genere cerco di evitare espressioni con ng-show e ng-hide in quanto sono stati progettati come booleani, non condizionali. Se ho bisogno di logica condizionale e booleana, preferisco inserire la logica condizionale usando ng-if come primo controllo, quindi aggiungere un ulteriore controllo per la logica booleana con ng-show e ng-hide

Howerver, se si desidera utilizzare un condizionale per ng-show o ng-hide, ecco un collegamento con alcuni esempi: Conditional Display using ng-if, ng-show, ng-hide, ng-include, ng-switch

2

Alcune di queste risposte di cui sopra non hanno funzionato per me, ma questo ha fatto. Nel caso in cui qualcun altro abbia lo stesso problema.

ng-show="column != 'vendorid' && column !='billingMonth'" 
Problemi correlati