「Ruby on Rails Tutorial」のサンプルアプリをAngularJSとBootstrap3を使う形にして作成します。前回作成したホームページのマイクロポスト一覧をページ化します。
1)ビューを修正
$ vi app/assets/templates/static_pages/home.html.erb
<div ng-controller="HomeCtrl">
<div ng-show="chkSignin().user.id > 0" class="row">
<div class="col-sm-4">
:
</div>
<div class="col-sm-8">
<h3>Micropost Feed</h3>
<ol class="microposts">
<li ng-repeat="mp in currentitems">
:
</li>
</ol>
<pagination total-items="totalitems"
ng-model="currentpage"
max-size="maxsize"
items-per-page="itemsperpage"
class="pagination-sm"
previous-text="Previous"
next-text="Next"
first-text="First"
last-text="Last"
boundary-links="true">
</pagination>
</div>
</div>
2)コントローラを修正
①ユーザー一覧、マイクロポスト一覧の場合と同様にページ化に関する定数、変数を設定。
②マイクロポスト登録時に最新のユーザー情報を取得し、feedを更新。
$ vi app/assets/javascripts/mymodule.js.erb
myModule.controller("HomeCtrl", function($scope, flashService, micropostsResource, sessionResource, $filter) {
:
$scope.submit = function() {
function success(response) {
sessionResource.current_user({}, function(response1) {
var current_user = response1;
//②マイクロポスト登録時に最新のユーザー情報を取得し、feedを更新
$scope.totalitems = current_user.feed.length;
feed_items = $filter('orderBy')(current_user.feed,'created_at',true);
$scope.currentitems = feed_items.slice(start,end);
flashService.setUser(current_user);
});
flashService.push(msg);
$scope.$emit("$routeChangeSuccess");
}
function failure(response) {
:
}
micropostsResource.create($scope.micropost, success, failure);
};
:
//①ページ化の設定
var feed_items = [];
$scope.maxsize = 5;
$scope.itemsperpage = 8;
$scope.currentpage = 1;
var start = 0;
var end = start + $scope.itemsperpage;
sessionResource.current_user({}, function(response) {
if (response.feed) {
var tmp_feed = response.feed;
$scope.totalitems = tmp_feed.length;
feed_items = $filter('orderBy')(tmp_feed,'created_at',true);
$scope.currentitems = feed_items.slice(start,end);
}
});
$scope.$watch('currentpage', function() {
start = ($scope.currentpage - 1) * $scope.itemsperpage;
end = start + $scope.itemsperpage;
$scope.currentitems = feed_items.slice(start,end);
},true);
});