1
pagination
のangular-material2
を使用しようとしています。私が直面している問題は、md-paginator
の値をサービスを通じて動的に設定することです。動的にmd-paginatorの値を設定しました
静的な値を使用してページネーションを作成できましたが、動的に設定する方法はわかりません。
TS
import {Component,ChangeDetectorRef, Input,ViewChild } from '@angular/core';
import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from '@angular/http';
import {MdPaginator,PageEvent} from '@angular/material';
import {DataSource} from '@angular/cdk';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/observable/merge';
import 'rxjs/add/operator/map';
@Component({
selector: 'table-http-example',
styleUrls: ['table-http-example.css'],
templateUrl: 'table-http-example.html',
})
export class TableHttpExample {
displayedColumns = ['dbquery', 'title'];
exampleDatabase: ExampleHttpDatabase | null;
dataSource: ExampleDataSource | null;
pageEvent: PageEvent;
@ViewChild(MdPaginator) paginator: MdPaginator;
constructor(private http: Http) {
}
ngOnInit(){
this.loadData();
}
loadData(){
this.exampleDatabase = new ExampleHttpDatabase(this.http);
this.dataSource = new ExampleDataSource(this.exampleDatabase,this.paginator);
}
onPaginateChange(event){
const startIndex = event.pageIndex * event.pageSize;
this.dataSource = new ExampleDataSource(this.exampleDatabase,this.paginator);
}
}
/** An example database that the data source uses to retrieve data for the table. */
export class ExampleHttpDatabase {
private issuesUrl = 'https://emgrweb.ecwcloud.com/eManagerWeb/rest/InterfaceQAClientController/getInterfaceClientScripts'; // URL to web API
getRepoIssues(startIndex,pageSize): Observable<any> {
var headers = new Headers();
headers.append('Content-Type', 'text/plain');
var requestoptions = new RequestOptions({
method: RequestMethod.Post,
url: this.issuesUrl,
headers: headers
body : "start=" +startIndex +"&limit="+ pageSize
})
return this.http.request(new Request(requestoptions)).map(this.extractData);
}
extractData(result: Response): any{
return result.json().data.map(data => {
return data
});
}
onPaginateChange(event){
//alert(JSON.stringify(event));
const startIndex = event.pageIndex * event.pageSize;
// this.drugmap.getDrugDataForClient(startIndex, event.pageSize);
this.dataSource = new BindDataTableSource(this.drugmap,event);
}
constructor(private http: Http) {}
}
export class ExampleDataSource extends DataSource<any> {
constructor(private _exampleDatabase: ExampleHttpDatabase,private _paginator : MdPaginator) {
super();
}
/** Connect function called by the table to retrieve one stream containing the data to render. */
connect(): Observable<any[]> {
console.log(this._paginator);
const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
return this._exampleDatabase.getRepoIssues(startIndex, this._paginator.pageSize);
}
disconnect() {}
}
HTML
<div class="example-container mat-elevation-z8">
<md-table #table [dataSource]="dataSource">
<ng-container cdkColumnDef="dbquery">
<md-header-cell *cdkHeaderCellDef> dbquery </md-header-cell>
<md-cell *cdkCellDef="let row"> {{row.title}} </md-cell>
</ng-container>
<ng-container cdkColumnDef="title">
<md-header-cell *cdkHeaderCellDef> Title </md-header-cell>
<md-cell *cdkCellDef="let row"> {{row.title}} </md-cell>
</ng-container>
<md-header-row *cdkHeaderRowDef="displayedColumns"></md-header-row>
<md-row *cdkRowDef="let row; columns: displayedColumns;"></md-row>
</md-table>
<md-paginator #paginator
[length]="100"
[pageIndex]="0"
[pageSize]="10"
[pageSizeOptions]="[5, 10, 25, 100]"
(page)="pageEvent = $event; onPaginateChange($event)"
>
</md-paginator>
</div>
はExampleHttpDatabase
にpaginator
オブジェクトを渡すしようとしましたが、私はそれをconsole
とき、それは未定義言います。
私は何か試してみましたが、プランカを更新しましたが、残念ながら設定されている値は「未定義」です。あなたは見て、助けてもらえますか? –
いくつかの問題は、 'pagerLength'とか' pageLength'と呼ばれることもあります。もっとも大きな問題は、右の 'this'コンテキストで' extractData'を呼び出さないということです。固定の例については、このplunkerをご覧ください:https://plnkr.co/edit/BBdEKJ4WnJVBetZR4AkY?p=preview –
ありがとうございました..その問題を解決しました。 –