Espressioni complesse sono possibili in ng-hide / ng-show?


180

Voglio farlo:

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

ma l'espressione valuta sempre a false.

Non voglio definire la funzione speciale attivata $scope.


1
Quella sintassi funziona per me e la uso spesso. Se sta valutando false, potresti voler ricontrollare quei valori. È possibile che gli oggetti "globali" e / o " undefined
mappanti

Leggi il mio commento sotto la risposta.
Paul,

solo un suggerimento: se usi invece il metodo controller, puoi effettivamente passare attraverso la valutazione nel debugger!
Dimitry K

Risposte:


212

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

Ho appena testato (avrei dovuto farlo prima) e qualcosa del genere ha ng-show="!a && b"funzionato come previsto.


4
Hai ragione. Il problema era che il flag isAdmin era di tipo "stringa" anziché "booleano".
Paul

121

ng-show/ ng-hideaccetta solo booleanvalori.

Per espressioni complesse è bene usare controller e ambito per evitare complicazioni.

Sotto uno funzionerà (non è un'espressione molto complessa)

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

Qui l'elemento verrà mostrato nell'interfaccia utente quando una delle due condizioni restituisce true (operazione OR).

In questo modo puoi usare qualsiasi espressione.


12

Funzionerà se non hai troppe espressioni.

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

Per più espressioni di queste utilizzare un controller.


1
Non credo che la tua affermazione sia corretta: This will work if you do not have too many expressions.anche se sono d'accordo che invece dovrebbe essere fatto nel controller.
Rahul Desai,

7

In genere cerco di evitare le espressioni con ng-show e ng-hide in quanto progettate come booleane, non come condizionali. Se ho bisogno sia della logica condizionale che di quella 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

Tuttavia, se vuoi usare un condizionale per ng-show o ng-hide, ecco un link con alcuni esempi: Visualizzazione condizionale usando ng-if, ng-show, ng-hide, ng-include, ng-switch


2

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

ng-show="column != 'vendorid' && column !='billingMonth'"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.