私はui-Bootstrapを使用していて、ページネーションを機能させようとしていますが、何か不足しているようです。私はドキュメントを読み、たくさんのプランカーを調べて、どのページにページングするコンテンツを指定しているかを調べてみましたが、うまくいきません。
これが私がやったことです http://plnkr.co/edit/5mfiAcOaGw8z8VinhIQo?p=preview
<section class="main" ng-controller="contentCtrl">
<div ng-repeat="friend in friends">
{{friend.name}}
</div>
<pagination total-items="totalItems" items-per-page="itemsPerPage" ng-model="currentPage" ng-change="pageChanged()"></pagination>
<p>
total Items: {{totalItems}}<br />
Items per page: {{itemsPerPage}}<br />
Current Page: {{currentPage}}
</p>
</section>
コントローラ:
angular.module('plunker', ['ui.bootstrap'])
.controller('contentCtrl', function ($scope) {
$scope.friends = [
{'name':'Jack'},
{'name':'Tim'},
{'name':'Stuart'},
{'name':'Richard'},
{'name':'Tom'},
{'name':'Frank'},
{'name':'Ted'},
{'name':'Michael'},
{'name':'Albert'},
{'name':'Tobby'},
{'name':'Mick'},
{'name':'Nicholas'},
{'name':'Jesse'},
{'name':'Lex'},
{'name':'Robbie'},
{'name':'Jake'},
{'name':'Levi'},
{'name':'Edward'},
{'name':'Neil'},
{'name':'Hugh'},
{'name':'Hugo'},
{'name':'Yanick'},
{'name':'Matt'},
{'name':'Andrew'},
{'name':'Charles'},
{'name':'Oliver'},
{'name':'Robin'},
{'name':'Harry'},
{'name':'James'},
{'name':'Kelvin'},
{'name':'David'},
{'name':'Paul'}
];
$scope.totalItems = 64;
$scope.itemsPerPage = 10
$scope.currentPage = 1;
$scope.setPage = function (pageNo) {
$scope.currentPage = pageNo;
};
$scope.pageChanged = function() {
console.log('Page changed to: ' + $scope.currentPage);
};
$scope.maxSize = 5;
$scope.bigTotalItems = 175;
$scope.bigCurrentPage = 1;
});
次の参照を追加するだけです。
あなたの体は次のようになります:
<html ng-app="friends">
<head>
...
</head>
<body>
<h4>Paginated Friends</h4>
<section class="main" ng-controller="contentCtrl">
<div ng-repeat="friend in filteredFriends">
{{friend.name}}
</div>
<pagination total-items="totalItems" items-per-page="itemsPerPage"
ng-model="currentPage" ng-change="pageChanged()"></pagination>
<p>
Total items: {{totalItems}}<br />
Items per page: {{itemsPerPage}}<br />
Current Page: {{currentPage}}
</p>
</section>
</body>
</html>
次に、次のコントローラーを定義します。
var app = angular.module('plunker', ['ngResource', 'ui.bootstrap']);
app.factory('friendsFactory', function($resource) {
return $resource('friends.json');
});
app.controller('contentCtrl', function ($scope, friendsFactory) {
$scope.friends = friendsFactory.query();
$scope.itemsPerPage = 10
$scope.currentPage = 1;
// $scope.maxSize = 5;
// $scope.bigTotalItems = 175;
// $scope.bigCurrentPage = 1;
$scope.pageCount = function () {
return Math.ceil($scope.friends.length / $scope.itemsPerPage);
};
$scope.friends.$promise.then(function () {
$scope.totalItems = $scope.friends.length;
$scope.$watch('currentPage + itemsPerPage', function() {
var begin = (($scope.currentPage - 1) * $scope.itemsPerPage),
end = begin + $scope.itemsPerPage;
$scope.filteredFriends = $scope.friends.slice(begin, end);
});
});
});
Ng-repeatで作成された変数を使用できます。これは機能します。変更するまで使用します。
ng-repeat="friend in friends.slice(((currentPage-1)*itemsPerPage), ((currentPage)*itemsPerPage)) track by $index"
ただし、この問題の最善の解決策は、フィルターを作成してチェーン化することです。あなたはおそらくその前に他のフィルターを使用したいので、それをチェーンの最後に置きます。以下は、orderbyフィルターを使用した例です。違いは、配列全体を注文してから、表示したい部分だけをページ分割して表示できることです。
function paginateFilter() {
return function (friends, currentPage, itemsPerPage) {
var filteredFlowers = flowers.slice(((currentPage-1)*itemsPerPage), ((currentPage)*itemsPerPage))
return filteredFriends;
};
}
そして、これがhtmlです。複数の変数を持つフィルターを使用する必要があります。
ng-repeat="friend in main.friends |orderBy: 'name' | paginate: main.currentPage: main.itemsPerPage">
MainはcontrollerAsの名前です。
ui-bootstrap 0.10は、ng-modelを使用して現在のページを更新しません。
現在のページを表示するには、_page="currentPage"
_を使用します。
現在のページを変更するには、on-select-page="setPage(page)"
を使用します。
例はここにあります:
http://plnkr.co/edit/UIWIeDSKIK4bG96eoJmt?p=preview
ng-modelを使用する場合。 ui-bootstrapバージョンを0.11に更新します
angularjs 1.5コンポーネントとTypeScriptを使用した実装
searchresults.controller.ts
import {Group as Groups, GroupSearchCriteria as GroupsSearchCriteria, GroupSearchResults as GroupsSearchResults } from "../../models/Groups";
import GroupsService from "groups/groups.service";
interface ISearchResultsController {
groups: Groups[];
groupsSearchCriteria: GroupsSearchCriteria;
pageChanged(): void;
splitGroupsPagination(): void;
}
class SearchResultsController implements ISearchResultsController {
groups: Groups[];
groupsSearchCriteria: GroupsSearchCriteria;
groupresSearchCriteria: any;
TotalResults: any;
CurrentPage: any;
ResultsPerPage: any;
pageCount: number;
begin: number;
end: number;
sortedResults: Groups[];
constructor(private groupsService: GroupsService, private groupSearchResults: GroupsSearchResults) {
var isolatedScopeSearchResults = this;
this.groups = isolatedScopeSearchResults.groupsService.searchCallback.SearchResults;
this.groupresSearchCriteria = isolatedScopeSearchResults.groupsService.searchCallback.Criteria;
this.TotalResults = 7;
this.CurrentPage = 1;
this.ResultsPerPage = 5;
}
$onInit() {
this.splitGroupsPagination();
}
splitGroupsPagination() {
this.pageCount = Math.ceil(this.TotalResults / this.ResultsPerPage);
this.begin = ((this.CurrentPage - 1) * this.ResultsPerPage);
this.end = this.begin + this.ResultsPerPage;
this.sortedResults = this.groups.slice(this.begin, this.end);
}
pageChanged() {
this.splitGroupsPagination();
}
}
export default SearchResultsController;
searchresults.component.ts
import SearchResultsController from "./searchresults.controller";
class SearchResultsComponent implements ng.IComponentOptions {
template = `
<div id="groupSearchResults" class="box-response">
<!-- start: results header with btn add-->
<div class="box-header">
<h2><span>Search Results: </span><span>{{$ctrl.groups.length}}</span> <span>Term: {{$ctrl.groupresSearchCriteria.SearchDescription}}</span></h2>
</div>
<div class="box-content">
<table class="table table-bordered table-hover table-striped">
<thead>
<tr>
<td>Name</td>
<td>Id</td>
<td>Consent Group</td>
<td>Permitted Uris</td>
<td>Actions</td>
</tr>
</thead>
<tbody>
<tr data-ng-repeat="group in $ctrl.sortedResults">
<td>{{group.Name}}</td>
<td>{{group.Id}}</td>
<td>{{group.IncludeInConsentGroups}}</td>
<td>{{group.PermittedUris}}</td>
<td>
<a class="btn btn-success" href="" ui-sref="edit({editgroupId:group.Id})"><i class="fa fa-edit"></i></a>
</td>
</tr>
</tbody>
</table>
</div>
<uib-pagination total-items="$ctrl.TotalResults" ng-model="$ctrl.CurrentPage" items-per-page="$ctrl.ResultsPerPage" ng-change="$ctrl.pageChanged()"></uib-pagination>
</div>
`;
controller = ['GroupsService',SearchResultsController];
}
export default SearchResultsComponent;