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.

Paul
quelle
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.

Mark Rajcok
quelle
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.

myaseedk
quelle
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.

lvadim01
quelle
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

James Drinkard
quelle
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'"
Todespirscher
quelle