
このプロジェクトでは、angularjsを使用しています。プロジェクトは既にかなり大きく、多くのカスタムディレクティブを使用していますが、今日は
ng-if
動作の問題に遭遇しました。
私にとって、条件はjsと同じように機能することが期待されていました。つまり、
if (condition) { ... } else { .... }
送信内容に応じて、要素は非表示または表示されます。
私の場合、
ng-if="column.is_available"
内のフィールドの存在
ng-if="column.is_available"
。 フィールドタイプは文字列ですが、いくつかのオプションがあります。
- はい
- いや
- %n%日後
- などなど
条件番号を確認するまではすべて順調でした。 非常に珍しい(少なくとも私にとって) 動作をする条件をチェックするときに、angularjsがtoBoolean関数を使用することがわかります。
function toBoolean(value) { if (typeof value === 'function') { value = true; } else if (value && value.length !== 0) { var v = lowercase("" + value); value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]'); } else { value = false; } return value; }
つまり、次の行で
false
を返します。
- f
- 0
- いや
- n
- []
公式文書にはこれについて何も書かれていません。 たぶんそれはクールで快適ですが、私の場合はそうではありません。 少なくともこのようなチェックでは、追加のディレクティブ
ng-extra-if="condition"
を使用する必要があり、通常の
ng-if
if-通常のif、jsの場合と同じです。
次のような問題を解決しました。
<div ng-if="isAvailable(row.is_available)">
$scope.isAvailable = function(is_available){ return !!is_available; }
しかし、これもできます:
<div ng-if="!!row.is_available">
これは
ng-hide
と
ng-show
も適用されます。