2013-03-01 8 views
157

私はそうしたい:ng-hide/ng-showでは複雑な表現が可能ですか?

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

が、発現はfalseに常に評価されます。

$scopeに特殊機能を定義したくありません。

+1

この構文は私には役に立ちますが、頻繁に使用します。 'false'と評価されている場合は、それらの値を再確認することができます。 「グローバル」オブジェクトおよび/または「マッピング」オブジェクトが「未定義」である可能性があります – derrylwc

+0

答えの下に私の意見をお読みください。 – Paul

+0

ちょうどヒント - 代わりにコントローラメソッドを使用する場合は、実際にデバッガで評価を進めることができます! –

答えて

195

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

私はちょうど(最初にやったことがあります)テストし、ng-show="!a && b"のようなものが期待どおりに機能しました。

+4

あなたは正しいです。問題は、isAdminフラグが 'boolean'ではなく 'string'タイプであることでした。 – Paul

109

ng-show/ng-hideは、boolean値のみを受け入れます。

複雑な式の場合、複雑さを避けるためにコントローラとスコープを使用するとよいでしょう。

ここ

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

(それは非常に複雑な式ではありません)1が動作する以下の要素は、二つの条件が真のリターン(OR演算)の際に任意のUIに表示されます。

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

11

これは、あまりにも多くの表現がない場合に機能します。

例:これはコントローラを使用するよりも、それ以上の式についてng-show="form.type === 'Limited Company' || form.type === 'Limited Partnership'"

+1

私はあなたのステートメントが正しいとは思わない: 'あなたはあまりにも多くの表現を持っていない場合に動作します。 '私はそれがコントローラで行われるべきであることに同意します。 –

6

通常、ng-showとng-hideは条件式ではなくブーリアンとして設計されているため、表現は避けてください。条件付きロジックとブールロジックの両方が必要な場合は、ng-ifを最初のチェックとして使用して条件ロジックに入れ、次にng-showとng-hideを使用してブールロジックの追加チェックを追加することをお勧めします。

Howerver、 ng-showまたはng-hideに条件を使用したい場合、ここにいくつかの例のリンクがあります:Conditional Display using ng-if, ng-show, ng-hide, ng-include, ng-switch

2

これらの回答は私にとってはうまくいきませんでしたが、他の誰かが同じ問題を抱えている場合に備えて。

ng-show="column != 'vendorid' && column !='billingMonth'" 
関連する問題