多くの場合、データ、つまりテーブル内のデータの表示に遭遇します。 このような各インターフェイスには、Ajaxを使用したデータの読み込み、大量のデータのページへの分割、データのフィルター処理、並べ替えなど、いくつかの機能が必要です。
私はこれらの問題を迅速に解決し、最小限のコードを記述したかったのです。
起こったことは次のとおりです。
GitHubリポジトリ
<table ng-table="tableParams" show-filter="true" class="table"> <tr ng-repeat="user in users"> <td title="Name" filter="{ 'name': 'text' }" sortable="name"> {[user.name]} </td> <td title="Age" filter="{ 'action': 'button' }" sortable="age"> {[user.age]} </td> </tr> </table>
Javascript:
var Api = $resource('/data'); $scope.tableParams = new ngTableParams({ page: 1, // show first page total: 0, // length of data count: 10, // count per page sorting: { name: 'asc' // initial sorting } }); $scope.$watch('tableParams', function(params) { $scope.loading = true; // ajax request to api Api.get(params.url(), function(data) { $scope.loading = false; // set new data $scope.users = data.result; // update table params $scope.tableParams.total = data.total; }); }, true);
デモ
htmlコードからわかるように、プログラマー自身がテーブルの行とその中の各セルを表示するテンプレートの行の塗りつぶしを制御します。これは、このソリューションを、私が検討した他のソリューション(例えばng-grid)
テーブルの見出しとページネーションは自動的に生成され、テーブルに追加されます。 ディレクティブとデータ読み込みコード間の関係全体が
tableParams
パラメーターに割り当てられます。この追跡により、データを更新するタイミング(サーバーからの読み込みまたは配列の再ソート)を知ることができます。
その結果、私たちは人生を少し良くする小さな指令を持っています。 AngularJS自体に1つの小さなバグがあるため、インターネット上ではこの種のソリューションはほとんどないと思います。 実際、それが存在していなかった場合、非常にクールで便利な
ng-transclude
を使用するだけですべてが解決されます。 しかし、それが修正されるまで、私のソリューションがあなたにとって役立つことを願っています。