2017-04-12 8 views
0

何らかの理由でこれは何もフィルタリングしません。角度フィルタ:{v:0}は何もフィルタリングしません。他の値は正しく動作します

$scope.oarray = [{ name:"(select)", v:0 },{ name:"name1", v:100 },{ name:"name2", v:200 }]; 

選択ボックスリストのすべての要素:"(select)""name1"、および"name2"フィルタはそれのためだけ"(select)"を返すように述べているにもかかわらず

<select 
    ng-model="s.id" 
    ng-options="c.v as c.name for c in oarray | filter:{v:0}" 
> 
</select> 

これは、構造は次のとおりです。ここで

は、選択されメンバーが v==0の唯一のメンバーです。

フィルタをv:100に変更すると、フィルタが適切にフィルタされます。

なぜですか?これが '機能'または '副作用'の場合は、事前定義済みの値を変更せずに回避策になりますか?

ありがとうございます。

PS:ここではあなたの遊び場です:http://plnkr.co/edit/huRPv08A4bucJmcG60Fe?p=preview

答えて

1

あなたのフィルタをv の値が0を含まれているすべてのオブジェクトを探している、ではない、それは0に等しいです。

あなたはここで2番目のパラメータは、コンパレータ、falseデフォルトオプションのパラメータである例えば

ng-options="c.v as c.name for c in oarray | filter:{v:0}:true" 

、厳密な比較を行うには、それを伝えるためにフィルターに:trueを送信する必要があります。 Angular documentation for filterこのパラメータに関する以下の情報が含まれています 式(それは関数ではない)を使用して検索された値が期待値に基づいて、一致 考慮すべきかどうかを判定に使用される

コンパレータ(からフィルタ式)と 実際の値(配列内のオブジェクトから)。

function(actual, expected)

のいずれ可能な機能は、比較する対象 値と述語値が与えられると 両方の値が等しいと見なされるべきである場合にtrueを返す必要があります。

truefunction(actual, expected) { return angular.equals(actual, expected)}の略語。これは本質的に厳密なものであり、期待値と実際の値の比較は です。

false:大文字小文字を区別しない方法でサブ文字列 が検索される関数の短縮形。プリミティブ値は 文字列に変換されます。カスタムのtoStringメソッド(Dateオブジェクトなど)が でない限り、オブジェクトはプリミティブと比較されません。

デフォルトはfalseです。

+0

ああ、ああ!どうもありがとうございます! – Grzegorz

関連する問題