AngularJS:ng-ifカスタム動作


このプロジェクトでは、angularjsを使用しています。プロジェクトは既にかなり大きく、多くのカスタムディレクティブを使用していますが、今日はng-if動作の問題に遭遇しました。

私にとって、条件はjsと同じように機能することが期待されていました。つまり、

 if (condition) { ... } else { .... } 


送信内容に応じて、要素は非表示または表示されます。



私の場合、 ng-if="column.is_available"内のフィールドの存在ng-if="column.is_available" 。 フィールドタイプは文字列ですが、いくつかのオプションがあります。


条件番号を確認するまではすべて順調でした。 非常に珍しい(少なくとも私にとって) 動作をする条件をチェックするときに、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を返します。


公式文書にはこれについて何も書かれていません。 たぶんそれはクールで快適ですが、私の場合はそうではありません。 少なくともこのようなチェックでは、追加のディレクティブ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-hideng-showも適用されます。

Source: https://habr.com/ru/post/J225243/


All Articles