2016-07-28 2 views
0

ng-repeatディレクティブで変数を一度バインドしてからその変数をフィルタリングすることが可能かどうか疑問に思っていました。ng-repeatでワンタイムバインディングした後のAngularJSフィルタ

今のところ私のコードでは、AFTERフィルタリングが実行されていますが、一時的にバインディングが実行されていますが、フィルタリングを実行する前にバインディングを実行する必要があります。ここで

私のコードです:

<div flex="20" ng-repeat="item in ::vm.items | filter: vm.itemSearch 
 
    | limitTo: vm.query.limit : (vm.query.page -1) * vm.query.limit"> 
 

 
</div>

vm.itemsことに注意してください潜在的に1回のため、したがって必要性結合側20,000要素に得ることができる配列であります。

フィルタは、検索と改ページの両方に使用されます。

構文エラー:しかし

<div flex="20" ng-repeat="item in (::vm.items) | filter: vm.itemSearch 
 
    | limitTo: vm.query.limit : (vm.query.page -1) * vm.query.limit"> 
 

 
</div>

、これが有効なAngularJSの構文は次のエラーのためではありません。次のようなものは、私は何をできるようにしたいと思います:トークン ':'式の第2列の主な式ではありません。

誰もこの制限を回避する方法はありますか?

+0

AngularJSでの高性能バインディングのためのモジュール[Bindonce](https://github.com/Pasvaz/bindonce)を見てください。 –

+0

私はこれを試してみましたが、それは悲しいことには違いはありませんでした。 – MLAlex

答えて

1

私はそれが実際に可能だとは思わない。フィルタリングを適用した後は、1つの時間制限値は変更されません。

フィルタリングした結果をng-repeatにのみ渡す必要があります。パフォーマンス的に| limitToはすべてのトリックを行います。あなたはあなたのコントローラ内のメソッドにそれを置くべきです - あなたのエラーは: or-operatorから来たと思います。

+0

これはエラーです(:: vm.items)。私が必要とするのは、アングルダイジェストサイクルを使わずにHTMLマークアップで配列を利用できるようにすることです。 – MLAlex

+1

これらの括弧はここで削除してください。私はまた、コントローラの配列をフィルタリングし、フィルタリングされた結果をng-repeatと| limitToはちょうど良いはずです。 – devjsp

関連する問題