Angular : Firestore의 데이터를 페이지 네이션하고 싶다 ② ~ Material2의 Paginator를 사용
Angular : Firestore의 데이터를 페이지 네이션하고 싶다 ② ~ Material2의 Paginator를 사용
마지막: Angular : Firestore의 데이터를 페이지 네이션하고 싶다 ① ~ 초간단한 방법
모처럼 멋있는 Material2의 Paginator라는 부품이 있으므로 사용해보고 싶다. 정식 매뉴얼은 이쪽. Paginator
환경
Angular CLI: 7.1.4
Node: 10.15.3
OS: win32 x64
Angular: 7.1.4
"@angular/material": "^7.3.4"
app.module.ts
Material2를 사용 중이라면 평소대로. app.module.ts에 MatPaginatorModule을 추가합니다.
app.module.ts
import {MatPaginatorModule} from '@angular/material/paginator';
@NgModule({
//モジュール
imports: [
MatPaginatorModule,
]
Paginator 붙이기
우선은 UI에 Material2의 Paginator를 붙인다. 위 환경에서와 같이 Material2는 도입이 끝난 것으로 한다. HTML은 다음과 같습니다.
<mat-paginator [length]="length"
[pageSize]="perPage"
[pageSizeOptions]="[10, 50, 100]"
(page)="getPaginatorData($event)"
>
</mat-paginator>
이것으로 이런 UI가 된다.
Angular CLI: 7.1.4
Node: 10.15.3
OS: win32 x64
Angular: 7.1.4
"@angular/material": "^7.3.4"
import {MatPaginatorModule} from '@angular/material/paginator';
@NgModule({
//モジュール
imports: [
MatPaginatorModule,
]
<mat-paginator [length]="length"
[pageSize]="perPage"
[pageSizeOptions]="[10, 50, 100]"
(page)="getPaginatorData($event)"
>
</mat-paginator>
이제 Paginator UI가 생겼습니다. 그런 다음 각 변수를 Firestore에서 가져온 데이터에 연결합니다.
Firestore 데이터에 연결
컨트롤러에 ① 지난번 설명한 slice에 사용할 각 변수를 설정하고 ②MatPaginator를 객체화하고 ③함수 getPaginatorData($event)를 쓴다.
import {MatPaginator} from '@angular/material';
// 各変数の宣言と初期値設定
length: number; //ページネーションで使う全書き込み件数
pageIndex: number = 0; //ページネーションで使うページインデックス
perPage: number = 50; //ページネーションで使うページ当たりのデータ数
lowValue: number = 0; //ページネーションのsliceで使うbegin値
highValue: number = 50; //ページネーションのsliceで使うbegin+perPage値
// MatPaginatorイベントをオブジェクト化
pageEvent: MatPaginator;
// イベント発火関数
public getPaginatorData(event) {
this.lowValue = event.pageIndex * event.pageSize;
this.highValue = this.lowValue + event.pageSize;
return event;
}
간단한 기능이나 노. Thankyou avokado!!!!
여러가지 구그하면, MatTableDataSource를 임포트해, dataSource를 만들어… 라고 있지만.
이런 식으로
dataSource : MatTableDataSource<Post>;
this.dataSource = new MatTableDataSource<Post>(response['results']);
이것이 필요하지 않습니다. 그런 방법도 있다는 것일까.length(전 데이터 건수)는?
마지막으로 length (모든 데이터 수)를 Firestore에서 가져 와서 length에 저장하는 방법.
// の全データ件数を獲得しlengthに保存
getDataSize() {
this.db.collection('commentsfaqs').valueChanges().subscribe( values => {
console.log('■データ数は、' + values.length);
this.length = values.length
})
}
이것은 로컬로 로드하고 카운트하는 방법이므로 수백 건 정도의 양이라면 유효하다는 것. 수천 이상이 되면 Firebase Funcion을 사용하는 쪽이 좋다. getDataSize()는 ngOnInit(){...}에 돌진해 최초로 실행시켜 둔다.
구성 요소의 전체 텍스트는 다음과 같습니다.
import {MatPaginator} from '@angular/material';
/* ページネーションに使用する変数と関数 */
length: number; //ページネーションで使う全書き込み件数
pageIndex: number = 0; //ページネーションで使うページインデックス初期値
perPage: number = 50; //ページネーションで使うページ当たりのデータ数初期値
lowValue: number = 0; //ページネーションのsliceで使うbegin値初期値
highValue: number = 50; //ページネーションのsliceで使うbegin+perPage値初期値
ngOnInit() {
this.getDataSize();
}
// MatPaginatorイベントをオブジェクト化
pageEvent: MatPaginator;
// の全データ件数を獲得しlengthに保存
getDataSize() {
this.db.collection('comments').valueChanges().subscribe( values => {
console.log('■データ数は、' + values.length);
this.length = values.length
})
}
// Paginatorからのイベント発火関数
public getPaginatorData(event) {
this.lowValue = event.pageIndex * event.pageSize;
this.highValue = this.lowValue + event.pageSize;
return event;
}
/* ページネーションに使用する変数と関数 ~ここまで */
HTML 쪽
<div style="display:inline-block; width: 100%" *ngFor="let post of posts | async | slice: lowValue : highValue">
<p>名前:{{ post.userName }}</p>
<p>メッセージ:{{ post.userName }}</p>
<p>投稿日時:{{ post.created }}</p>
</div>
(보충) 일본어화
Angular와 Material2의 버전이 다르지만 AngularMaterial의 Paginator를 일본어화과 같은 방식으로 잘 갔다.
이런 느낌입니다.
(보충) showFirstLastButtons
HTML에 이하의 파라미터를 붙이면 최초와 마지막 페이지로 이동하는 화살표를 추가할 수 있다.
[showFirstLastButtons]="true"
<mat-paginator [length]="length"
[pageSize]="perPage"
[pageSizeOptions]="[10, 50, 100]"
(page)="getPaginatorData($event)"
[showFirstLastButtons]="true"
>
참조 : How to use paginator from material angular?
Reference
이 문제에 관하여(Angular : Firestore의 데이터를 페이지 네이션하고 싶다 ② ~ Material2의 Paginator를 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/atomyah/items/559298554179df83b05e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)