mirror of https://github.com/abpframework/abp.git
2 changed files with 89 additions and 0 deletions
@ -0,0 +1,38 @@ |
|||
<div |
|||
class="ui-paginator-bottom ui-paginator ui-widget ui-widget-header ui-unselectable-text ui-helper-clearfix" |
|||
> |
|||
<a |
|||
class="ui-paginator-first ui-paginator-element ui-state-default ui-corner-all" |
|||
[class.ui-state-disabled]="value === 1" |
|||
tabindex="-1" |
|||
(click)="changePage(1)" |
|||
><span class="ui-paginator-icon pi pi-step-backward"></span></a |
|||
><a |
|||
class="ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all" |
|||
[class.ui-state-disabled]="value === 1" |
|||
tabindex="-1" |
|||
(click)="changePage(value - 1)" |
|||
><span class="ui-paginator-icon pi pi-caret-left"></span></a |
|||
><span class="ui-paginator-pages" |
|||
><a |
|||
*ngFor="let page of pageArray" |
|||
(click)="changePage(page)" |
|||
class="ui-paginator-page ui-paginator-element ui-state-default ui-corner-all" |
|||
[class.ui-state-active]="page === value" |
|||
tabindex="0" |
|||
>{{ page }}</a |
|||
></span |
|||
><a |
|||
class="ui-paginator-next ui-paginator-element ui-state-default ui-corner-all" |
|||
[class.ui-state-disabled]="value === totalPages" |
|||
tabindex="0" |
|||
(click)="changePage(value + 1)" |
|||
><span class="ui-paginator-icon pi pi-caret-right"></span></a |
|||
><a |
|||
class="ui-paginator-last ui-paginator-element ui-state-default ui-corner-all" |
|||
[class.ui-state-disabled]="value === totalPages" |
|||
tabindex="0" |
|||
(click)="changePage(totalPages)" |
|||
><span class="ui-paginator-icon pi pi-step-forward"></span |
|||
></a> |
|||
</div> |
|||
@ -0,0 +1,51 @@ |
|||
import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core'; |
|||
|
|||
@Component({ |
|||
selector: 'abp-paginator', |
|||
templateUrl: 'paginator.component.html', |
|||
}) |
|||
export class PaginatorComponent implements OnInit { |
|||
private _value = 1; |
|||
@Input() |
|||
get value(): number { |
|||
return this._value; |
|||
} |
|||
set value(newValue: number) { |
|||
if (newValue < 1) return; |
|||
else if (newValue > this.totalPages) return; |
|||
|
|||
this._value = newValue; |
|||
this.valueChange.emit(newValue); |
|||
} |
|||
|
|||
@Output() |
|||
readonly valueChange = new EventEmitter<number>(); |
|||
|
|||
@Input() |
|||
totalPages = 0; |
|||
|
|||
get pageArray(): number[] { |
|||
const count = this.totalPages < 5 ? this.totalPages : 5; |
|||
|
|||
if (this.value === 1 || this.value === 2) { |
|||
return Array.from(new Array(count)).map((_, index) => index + 1); |
|||
} else if (this.value === this.totalPages || this.value === this.totalPages - 1) { |
|||
return Array.from(new Array(count)).map((_, index) => this.totalPages - count + 1 + index); |
|||
} else { |
|||
return [this.value - 2, this.value - 1, this.value, this.value + 1, this.value + 2]; |
|||
} |
|||
} |
|||
|
|||
ngOnInit() { |
|||
if (!this.value || this.value < 1 || this.value > this.totalPages) { |
|||
this.value = 1; |
|||
} |
|||
} |
|||
|
|||
changePage(page: number) { |
|||
if (page < 1) return; |
|||
else if (page > this.totalPages) return; |
|||
|
|||
this.value = page; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue