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-hide



ng-show



も適用されます。



All Articles