2013-07-12 13 views
5

これは私のAngularJSで初めての演奏で、実際には開始チュートリアルに従っています。チュートリアルのスクリプトを少し分だけ追加するだけで、チュートリアルのスクリプトを自分の理解に合わせて微調整することができたのは私の心の中にありました。述語関数を使用したAngular ng-repeatフィルタが期待通りに機能しない

{ 
     "age": 1, 
     "id": "motorola-xoom", 
     "imageUrl": "img/phones/motorola-xoom.0.jpg", 
     "name": "MOTOROLA XOOM™", 
     "snippet": "The Next, Next Generation..." 
    } 

私が何をしようとしていた何をオーダーリストの自動取り込ま選択ボックスを追加しました::基本的には、チュートリアルで使用さ電話オブジェクトたが

<select ng-model="orderProp"> 
     <option ng-repeat="(key, value) in phones[0]" value="{{key}}"> 
      {{labels[key]}} 
     </option> 
    </select> 

モデルラベルをコントローラに追加しました。

$scope.labels = { 
     "name": "Phone name", 
     "snippet": "Description", 
     "age": "Newest", 
    }; 

予想通りそれは私だけ上記の3つのプロパティをフィルタリングしたかったので、私はこのようにフィルタリングするためのカスタム前提機能を追加するのは簡単だろうと思うことを除いて、働いていた:

$scope.isPhonePropFilterable = function (propName) { 
     console.log('it DOES NOT get here!!!'); 
     return propName == 'name' || propName != 'snippet' || propName != 'age'; 
    }; 

、コメントを追加しましたこれはng-repeatへ

 <option ng-repeat="(key, value) in phones[0] | filter:isPhonePropFilterable" value="{{key}}"> 

私の驚きには、思ったほど簡単ではなかった、私のフィルタ機能は呼ばれなかった。

は、ここでそれを参照してください。plunker

私は何も悪いことをしましたか?編集した


NGリピートフィルタ配列、反対しないをフィルタリングサポートしています。 配列 paramが配列でない場合、フィルタ関数は返します。

+0

まあ、それは私のせいでした。 Ng-repeatフィルターは** array **のみをサポートしています。そして、配列関数paramが配列でない場合は、フィルタ関数をチェックして返します。 –

+2

このコメントは、他の人がこの問題が解決されたことに気付くように答えてください。 – EvAlex

答えて

4

まあ、それは私のせいでした。 Ng-repeatフィルターはアレイのみをサポートしています。そして、フィルタ関数をチェックすると、配列paramが配列でない場合に返されます。

関連する問題