ng-repeatでうまく動作する複数のフィルタがあります。しかし、コードは、実際にセットでフィルターを動作させるのに不必要に長く思えますし、もっと良い方法があるのだろうかと思っています。ここで複数のフィルターを実装する最良の方法AngularJS?
は、例えばフィルタである - このビットは、(誰もが何かアドバイスを持っていなければ)私はOKだ - それらはすべて同様の構造は、次のとおりです。
app.js
.filter('taskClient', function() {
return function (items, clientId) {
if (!clientId) { return items; }
var filtered = [];
angular.forEach(items, function(item) {
if (item.client) {
if (item.client.id === clientId) {
filtered.push(item);
}
}
});
return filtered;
}
})
とASを私は言った - これらのいくつかがあります。その後、私のNGリピートに、私は(これは維持するのは難しいと過度に長いようで、任意のより良い技術上の情報をいただければ幸いビットである)ようにそれらを実装:
タスク-index.htmlを
<md-list-item icp-task-line ng-repeat="task in TasksCtrl.tasks | taskOwner: TasksCtrl.selectedUserFilter | taskClient: TasksCtrl.clientId | taskDepartment: TasksCtrl.departmentId | taskPriority: TasksCtrl.priority | taskWithClient: TasksCtrl.withClient | taskEndDate: TasksCtrl.endDate | filter: {progress: 0} | filter: searchText | orderBy: TasksCtrl.orderTasks" class="md-2-line"></md-list-item>
ここでどの程度のスクロールが行われているかで判断すると、私は上記のコードで私の問題を見ることができると思います。ビューのタスクの長さを取得するために(私は完了した、進行中などに分かれています)、私は再びすべてのフィルタをリストする必要があります。
これらのフィルタを実装する方法はありますか?
私はまた、this articleを読んだ後に、ステートフルフィルタと非ステートフルフィルタの違いを理解していないことに懸念しています。上記フィルタはパフォーマンスに最適化されていますか?私はあなたが本当に強力でjavascript関数filter()
を、使用することをお勧め
これらのフィルタを多数使用することを教えてください。表示プロセスで実際に何を達成しようとしていますか。サンプルデモが提供されれば素晴らしいでしょう。 –
上記のすべてのオプションでタスクをフィルタリングすることができれば、その理由が分かりました。ただし、ロード時に適用されるのは1つだけです。チェックボックスまたはドロップダウンを使用して、すべてがngモデルを通じて実行されます。 – DJC
非常に多くのフィルタを使用すると問題が発生します。それはすべての時計のフィルタが追加すると関係しています。パイプが多くなるほど、あなたは持っている時計が増え、パフォーマンスが低下します。すべてのテストを行う単一のフィルタを実装するか、代わりに多数のファクトリフィルタメソッドを使用する単一のフィルタを実装することをお勧めします(配列内に保持し、フィルタで 'forEach'を使用する)。このために使用できるデザインパターンがたくさんあります。重要なことは、連鎖フィルターの数を最小限に保つことです。 – eitanfar