ng-hide / ng-showで複雑な表現は可能ですか?


180

私はそうしたいです:

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

しかし、式は常にに評価されfalseます。

に特別な関数を定義したくありません$scope


1
その構文は私にとってはうまくいき、私はそれを頻繁に使用します。がに評価されるfalse場合は、それらの値を再確認することをお勧めします。「グローバル」または「マッピング」オブジェクトが存在する可能性がありますundefined
derrylwc

回答の下にある私のコメントを読んでください。
Paul

単なるヒント-代わりにコントローラーメソッドを使用する場合、実際にデバッガーで評価をステップ実行できます!
Dimitry K

回答:


212

任意のJavaScriptコードを実行する必要がある場合、またはtrueまたはfalseを返すフィルターを定義できる場合は、コントローラーメソッドを使用します。

私はテストしました(最初にそれを行うべきng-show="!a && b"でした)、そして期待どおりに動作したようなもの。


4
あなたが正しいです。問題は、isAdminフラグのタイプが「ブール」ではなく「文字列」であったことでした。
Paul

121

ng-show/ ng-hideboolean値のみを受け入れます。

複雑な式の場合、複雑さを避けるためにコントローラーとスコープを使用することをお勧めします。

以下は動作します(あまり複雑な表現ではありません)

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

ここでは、2つの条件のいずれかがtrue(OR演算)を返すと、UIに要素が表示されます。

このように、任意の式を使用できます。


12

これは、式が多すぎない場合に機能します。

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

これ以上の式にはコントローラを使用します。


1
私はあなたの発言が正しいとは思わない:This will work if you do not have too many expressions.それは代わりにコントローラで行われるべきだと私は同意する。
Rahul Desai 2016

7

ng-showとng-hideを使用した式は、条件式ではなくブール値として設計されているため、通常は使用しないようにします。条件付きロジックとブールロジックの両方が必要な場合は、最初のチェックとしてng-ifを使用して条件付きロジックを挿入し、次にng-showとng-hideを使用してブールロジックの追加チェックを追加します

さて、ng-showまたはng-hideに条件を使用したい場合は、いくつかの例のリンクを以下に示します。ng -if、ng-show、ng-hide、ng-include、ng-switchを使用した条件付き表示


2

上記の回答のいくつかはうまくいきませんでしたが、うまくいきました。他の誰かが同じ問題を抱えている場合に備えて。

ng-show="column != 'vendorid' && column !='billingMonth'"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.