AngularJSにおける「コレクション(Collections)」は、データの集合を管理するための重要な概念です。AngularJSは、動的なWebアプリケーションを作成するためのJavaScriptフレームワークであり、コレクションは主にデータの格納、操作、表示を行う際に使用されます。本記事では、AngularJSにおけるコレクションの概念、利用方法、実践的な応用例について詳しく解説します。
1. コレクションの基本概念
AngularJSにおけるコレクションとは、一般的に配列やオブジェクトといったデータの集合を指します。これらのコレクションは、AngularJSの「モデル」として定義され、ビュー(HTML)と連携して動的にデータを表示するために利用されます。AngularJSでは、データバインディングを利用することで、コレクションの変更を自動的にビューに反映させることができます。

1.1 コレクションのデータバインディング
データバインディングは、AngularJSの最も強力な機能の1つです。コレクションをモデルとして使用する際、ビューに表示されるデータがモデルにバインドされ、モデルが変更されるたびにビューが更新されます。例えば、配列のデータをHTMLテーブルで表示する場合、AngularJSのng-repeat
ディレクティブを使って、コレクションの各要素を動的に繰り返し表示できます。
html<table>
<tr ng-repeat="item in items">
<td>{{ item.name }}td>
<td>{{ item.price }}td>
tr>
table>
上記のコードでは、items
というコレクションがng-repeat
によって反復され、各アイテムのname
とprice
がテーブルに表示されます。
1.2 コレクションとAngularJSのスコープ
AngularJSのスコープは、コントローラーとビューの間でデータを共有するための仕組みです。コレクションは通常、コントローラー内で定義され、そのデータはビューにバインドされます。例えば、次のようにコントローラーでコレクションを定義し、ビューに渡すことができます。
javascriptapp.controller('ProductController', function($scope) {
$scope.items = [
{ name: 'Apple', price: 100 },
{ name: 'Banana', price: 50 },
{ name: 'Cherry', price: 200 }
];
});
このように、コントローラー内でコレクションを定義し、それをビューに渡すことによって、動的なコンテンツを表示することができます。
2. AngularJSでのコレクション操作
AngularJSでは、コレクションに対する操作を簡単に行うための様々な機能が提供されています。これには、フィルタリング、ソート、検索、並び替えなどが含まれます。
2.1 フィルタリングとng-repeat
ng-repeat
と組み合わせて、コレクションをフィルタリングすることができます。AngularJSにはfilter
ディレクティブが組み込まれており、これを使うことでコレクションの要素を特定の条件で絞り込むことができます。
例えば、価格が100円以上の商品だけを表示する場合、次のようにfilter
を使って条件を指定します。
html<table>
<tr ng-repeat="item in items | filter:{price: '>100'}">
<td>{{ item.name }}td>
<td>{{ item.price }}td>
tr>
table>
この例では、items
コレクションから、価格が100円を超える商品だけを表示しています。
2.2 ソートとorderBy
AngularJSでは、orderBy
を使用してコレクションの要素をソートすることができます。例えば、価格順に商品を並び替えるには、次のようにします。
html<table>
<tr ng-repeat="item in items | orderBy:'price'">
<td>{{ item.name }}td>
<td>{{ item.price }}td>
tr>
table>
ここでは、price
プロパティを基準にコレクションを昇順でソートしています。降順にしたい場合は、次のようにします。
html<tr ng-repeat="item in items | orderBy:'-price'">
2.3 検索とfilter
コレクション内のデータを動的に検索する場合、filter
ディレクティブを使うことで簡単に実現できます。例えば、ユーザーが検索ボックスに入力したキーワードに基づいて商品名をフィルタリングする場合、次のようなコードになります。
html<input type="text" ng-model="searchText" placeholder="検索">
<table>
<tr ng-repeat="item in items | filter:searchText">
<td>{{ item.name }}td>
<td>{{ item.price }}td>
tr>
table>
このコードでは、ng-model
ディレクティブを使って、ユーザーの入力をsearchText
モデルにバインドしています。filter:searchText
は、コレクションの中でsearchText
が含まれているアイテムのみを表示するようにします。
3. コレクションの操作とパフォーマンス
コレクションの操作は強力ですが、大量のデータを扱う場合はパフォーマンスに注意が必要です。例えば、ng-repeat
を使って大量のデータを反復処理する場合、AngularJSは各要素を監視し続けます。これにより、パフォーマンスに影響を及ぼすことがあります。
3.1 パフォーマンスの最適化
AngularJSでは、ng-repeat
を最適化するための手段として、track by
を使用することができます。これを使うことで、AngularJSはどの要素が変更されたのかを効率的に追跡できるようになります。
html<tr ng-repeat="item in items track by item.id">
<td>{{ item.name }}td>
<td>{{ item.price }}td>
tr>
ここでは、track by
を使用して、item.id
を基準に要素を追跡しています。これにより、アイテムの変更をより効率的に管理できます。
3.2 コレクションの遅延読み込み
大量のデータを扱う場合は、コレクションを一度に全て読み込むのではなく、遅延読み込み(Lazy Loading)を活用することも有効です。AngularJSでは、サーバーからデータをページングやスクロールに応じて少しずつ取得することができます。この方法により、初期読み込み時間を短縮し、パフォーマンスを改善することができます。
4. コレクションの実践的な利用例
実際のアプリケーションでは、コレクションを扱うシーンが多々あります。例えば、商品リストを表示するショッピングサイトでは、商品の一覧をコレクションとして管理し、フィルタリングやソートを行います。また、ユーザー管理システムでは、ユーザーのリストを表示し、編集や削除などの操作を行うこともあります。
次に、商品のリストを表示し、検索、ソート、フィルタリングを行う簡単な例を示します。
htmlhtml>
<html lang="ja" ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>商品リストtitle>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js">script>
head>
<body ng-controller="ProductController">
<h1>商品リストh1>
<input type="text" ng-model="searchText" placeholder="商品名で検索">
<table>
<tr ng-repeat="item in items | filter:searchText | orderBy:'price'">
<td>{{ item.name }}td>
<td>{{ item.price }}円td>
tr>
table>
<script>
angular.module('myApp', [])
.controller('ProductController', function($scope) {
$scope.items = [
{ name: 'Apple', price: 100 },
{ name: 'Banana', price: 50 },
{ name: 'Orange', price: 80 },
{ name: 'Grap