「Ruby on Rails Tutorial」のサンプルアプリをAngularJSとBootstrap3を使う形にして作成します。前回、AngularJSのビューでユーザープロファイルページにそのユーザーのマイクロポストを表示しました。今回はそのマイクロポストをページ化して表示するように修整しました。
1)AngularJSビューを修整
$ vi app/assets/templates/users/show.html.erb
<div ng-controller="UsersShowCtrl" class="container">
:
<div class="col-xs-6 col-sm-8">
<h3>Microposts({\{user_info.microposts.length}})</h3>
<ol class="microposts">
<li ng-repeat="mp in currentitems">
<div>{\{mp.content}}</div>
<small class="text-muted">Posted {\{mp.created_at | date:'medium'}}</small>
</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>
2)AngularJSコントローラを修整
①AngularJSのフィルターを使ってマイクロポストを降順に並び替え
myModule.controller(“UsersShowCtrl”, function($scope,・・, $filter) {
:
microposts = $filter(‘orderBy’)($scope.user_info.microposts,’created_at’,true);
②ユーザー一覧と同様にページ化
$ vi app/assets/javascripts/mymodule.js.erb
myModule.controller("UsersShowCtrl", function($scope, $routeParams, userResource, flashService, $filter) {
$scope.maxsize = 5;
$scope.itemsperpage = 3;
$scope.currentpage = 1;
var microposts = [];
var start = 0;
var end = start + $scope.itemsperpage;
userResource.show({ id: $routeParams.id }, function(response) {
$scope.user_info = response;
$scope.totalitems = $scope.user_info.microposts.length;
microposts = $filter('orderBy')($scope.user_info.microposts,'created_at',true);
$scope.currentitems = microposts.slice(start,end);
$scope.$watch('currentpage', function() {
start = ($scope.currentpage - 1) * $scope.itemsperpage;
end = start + $scope.itemsperpage;
$scope.currentitems = microposts.slice(start,end);
},true);
});