Sind komplexe Ausdrücke in ng-hide / ng-show möglich?


180

Ich möchte das tun:

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

aber der Ausdruck wird immer zu ausgewertet false.

Ich möchte keine Sonderfunktion für definieren $scope.


1
Diese Syntax funktioniert bei mir und ich benutze sie häufig. Wenn es ausgewertet wird false, möchten Sie diese Werte möglicherweise noch einmal überprüfen. Es ist möglich, dass die "Globals" - und / oder "Mapping" -Objekteundefined
derrylwc

Lesen Sie meinen Kommentar unter der Antwort.
Paul

Nur ein Hinweis - wenn Sie stattdessen die Controller-Methode verwenden, können Sie die Auswertung im Debugger tatsächlich durchlaufen!
Dimitry K

Antworten:


212

Verwenden Sie eine Controller-Methode, wenn Sie beliebigen JavaScript-Code ausführen müssen, oder definieren Sie einen Filter, der true oder false zurückgibt.

Ich habe gerade getestet (hätte das zuerst tun sollen) und so etwas hat wie ng-show="!a && b"erwartet funktioniert.


4
Du hast recht. Das Problem war, dass das isAdmin-Flag vom Typ 'string' und nicht vom Typ 'boolean' war.
Paul

121

ng-show/ ng-hideakzeptiert nur booleanWerte.

Für komplexe Ausdrücke empfiehlt es sich, Controller und Scope zu verwenden, um Komplikationen zu vermeiden.

Unten wird man arbeiten (Es ist kein sehr komplexer Ausdruck)

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

Hier wird das Element in der Benutzeroberfläche angezeigt, wenn eine der beiden Bedingungen true zurückgibt (ODER-Operation).

So können Sie beliebige Ausdrücke verwenden.


12

Dies funktioniert, wenn Sie nicht zu viele Ausdrücke haben.

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

Verwenden Sie für mehr Ausdrücke als diesen einen Controller.


1
Ich denke nicht, dass Ihre Aussage richtig ist: This will work if you do not have too many expressions.obwohl ich damit einverstanden bin, dass sie stattdessen im Controller durchgeführt werden sollte.
Rahul Desai

7

Ich versuche im Allgemeinen, Ausdrücke mit ng-show und ng-hide zu vermeiden, da sie als Boolesche Werte und nicht als Bedingungen konzipiert wurden. Wenn ich sowohl bedingte als auch boolesche Logik benötige, ziehe ich es vor, die bedingte Logik mit ng-if als erste Prüfung einzufügen und dann eine zusätzliche Prüfung für die boolesche Logik mit ng-show und ng-hide hinzuzufügen

Wenn Sie jedoch eine Bedingung für ng-show oder ng-hide verwenden möchten, finden Sie hier einen Link mit einigen Beispielen: Bedingte Anzeige mit ng-if, ng-show, ng-hide, ng-include, ng-switch


2

Einige dieser obigen Antworten haben bei mir nicht funktioniert, aber das hat funktioniert. Nur für den Fall, dass jemand anderes das gleiche Problem hat.

ng-show="column != 'vendorid' && column !='billingMonth'"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.