59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
import ngModule from '../../module';
|
|
import './style.scss';
|
|
|
|
export default class Paging {
|
|
get numPages() {
|
|
return Math.ceil(this.numItems / this.numPerPage);
|
|
}
|
|
|
|
constructor($http, $scope) {
|
|
this.$http = $http;
|
|
this.$scope = $scope;
|
|
this.where = this.filter;
|
|
this.numPerPage = null;
|
|
this.numItems = 0;
|
|
$scope.$watch('$ctrl.index.model.length', () => this.onModelUpdated());
|
|
}
|
|
|
|
$onChanges(changes) {
|
|
if (!this.index) return;
|
|
this.numPerPage = this.index.filter.size;
|
|
this.currentPage = this.index.filter.page;
|
|
if (changes.total)
|
|
this.numItems = changes.total.currentValue;
|
|
}
|
|
|
|
onModelUpdated() {
|
|
let index = this.index;
|
|
let filter = index.filter;
|
|
|
|
if (filter.page >= this.numPages && index.model.length >= this.numPerPage)
|
|
this.numItems = filter.page * filter.size + 1;
|
|
}
|
|
|
|
onPageChange(page) {
|
|
this.index.filter.page = page;
|
|
if (typeof this.pageChange === 'undefined') {
|
|
this.index.accept();
|
|
} else {
|
|
this.pageChange();
|
|
}
|
|
}
|
|
$doCheck() {
|
|
if (this.index && this.index.filter && this.index.filter.page && this.index.filter.page != this.currentPage) {
|
|
this.currentPage = this.index.filter.page;
|
|
}
|
|
}
|
|
}
|
|
Paging.$inject = ['$http', '$scope'];
|
|
|
|
ngModule.component('vnPaging', {
|
|
template: require('./paging.html'),
|
|
bindings: {
|
|
index: '<',
|
|
pageChange: '&?',
|
|
total: '<'
|
|
},
|
|
controller: Paging
|
|
});
|