私は、テーブルにページネーションを追加するために、BootstrapのPaginationディレクティブを使用しています。AngularJSのページ分割
これは、私が手動で$ scope.transactions(コントローラのコメントアウトされたコードを参照)に追加すると、ページネーションが完全にうまく動作するという点で奇妙です。しかし、AJAX呼び出しで$ scope.transactionsを設定しようとすると、表には何も表示されません。 AJAX呼び出しが次の値を返します。
[{"date":"2017-01-06","amount":123,"action":"Deposit","id":1},{"date":"2017-01-06","amount":200,"action":"Deposit","id":2},{"date":"2017-01-06","amount":400,"action":"Deposit","id":3}]
ビュー:
<tr ng-repeat="transaction in f ">
<td>{{transaction.id}}</td>
<td>$ {{transaction.amount}}</td>
<td>{{transaction.action}}</td>
<td>{{transaction.date}}</td>
</tr>
</table>
<pagination
ng-model="currentPage"
total-items="transactions.length"
max-size="maxSize"
boundary-links="true">
</pagination>
コントローラー:
var mmyApp = angular.module('myApp',['ui.bootstrap']).controller('TasksController', TasksController);
function TasksController($scope, $http) {
$scope.f = []
,$scope.currentPage = 1
,$scope.numPerPage = 3
,$scope.maxSize = 5;
$scope.transactions = [];
$scope.history = "";
$http.get('transactions').then(function (response) {
$scope.transactions = response.data;
}, function (error) {
throw error;
});
//if i use this commented out code instead of the AJAX call, the pagination works fine
/*$scope.makeTransactions = function() {
$scope.transactions = [];
for (i=1;i<=1000;i++) {
$scope.transactions.push({"id":i});
}
};
$scope.makeTransactions();
*/
$scope.$watch('currentPage + numPerPage', function() {
var begin = (($scope.currentPage - 1) * $scope.numPerPage)
, end = begin + $scope.numPerPage;
$scope.f = $scope.transactions.slice(begin, end);
});
}
ありがとう、これが私の問題を解決しました!しかし、あなたが私を助けることができるかどうか疑問に思っていたもう一つの問題がまだあります。この行が "total-items =" transactions.length ""で実行されると、トランザクションの現在の長さは0になるので、追加のページは表示されません。私はこの行がAJAX呼び出しが終了する前に実行されると思います。おそらくAJAX呼び出しが完了した後に、おそらく合計項目を動的に設定する方法はありますか? –
更新する必要があります。そうでない場合は、関数 'totalItems()'へのバインディングを変更してみてください: '$ scope.totalItems = function(){return $ scope.transactions.length;}' –
バインディングを関数に変更しました。次のエラー。 b.TasksController。$ scope.totalItems –