2013-04-17 11 views
33

は、あなたが変数の角度 "|フィルター"式の結果配列を取得するにはどうすればよいですか?角度で

<input type="text" ng-model="query"> 

<table> 
    <tr ng-repeat="phone in phones | filter: query"> 
     <td>{{phone.vendor}}</td> 
     <td>{{phone.model}}</td> 
    </tr> 
</table> 

のようにフィルタ式を書くことができ、それはあなたがinputに入るqueryテキストに一致する電話機だけを表示するようにテーブルを更新します。

フィルタの対応する結果配列を取得するにはどうすればよいですか?変数(スコープ変数など)に現在表示されている[phone object]

+2

[AngularJS - ngRepeatフィルタリングされた結果参照を取得する方法](https://stackoverflow.com/questions/11721863/angularjs-how-to-get-an-ngrepeat-filtered-result-reference)の可能な複製 –

答えて

76

実際に、新しい変数を角度式のスコープに割り当てることができます。したがって、最も簡単な解決策は<tr ng-repeat="phone in (filteredPhones = (phones | filter: query))">です。 filteredPhonesは現在のスコープ内の変数になりました。this plnkr exampleを参照してください。

+1

これは素晴らしく、とても簡単です! – nh2

+0

クエリの変更で何らかのイベントが発生する可能性はありますか? – Lipis

+2

あなたは '$ scope。$ watch( 'query'、function(newQuery、oldQuery){...});' – joakimbl

18

あなたのコントローラの内部では、あなたのqueryテキストに変更を見て、(あなたが注入しなければならないサービス$filterから'filter'という名前のフィルタを使用して)$filter('filter')ある{expression} | filter: {expression}のJavascriptの同等のものを、使用することができます。

あなたのHTMLスニペットがコントローラMyControllerによって制御されているとします。そして、あなたはそれを変更することができます。

myApp.controller("MyController", ["$scope", "$filter", function($scope, $filter) { 

    $scope.$watch('query', function(newVal, oldVal) { 
     console.log("new value in filter box:", newVal); 

     // this is the JS equivalent of "phones | filter: newVal" 
     $scope.filteredArray = $filter('filter')($scope.phones, newVal); 
    }); 
}]); 

たび、あなたquery変更、フィルタアレイは、あなたの$の範囲でfilteredArrayとして利用できるようになります、そして、あなたはあなたのスニペットで表現としてfilteredArray使用することができます。


すべてこれは実際にhttp://docs.angularjs.org/api/ng.$filterhttp://docs.angularjs.org/api/ng.filter:filterに文書化されなければなりません。しかし、最初のリンクのドキュメンテーションはあまりにも疎であり、実際にはコメントから2番目のリンクにしか到達できません。私はそれをドキュメントに追加しようとしましたが、角をクローズしてドキュメントを作成した後、ブラウザを介してアクセスするだけでは機能しませんでしたが、APIをナビゲートするのは役に立たないエラーがなくサイレントに失敗しました。

+0

これはうまくいきますが、@ joakimblの答えはずっと簡単です。 – nh2

+4

@ joakimblの例でfilteredPhonesを見るのは良い解決策ではないようです(イベントが多すぎる)ので、フィルタを適用した後にロジックを追加したい場合は、このバージョンを使用することをお勧めします。 – aweibell

関連する問題