2017-07-25 6 views
1

paginationangular-material2を使用しようとしています。私が直面している問題は、md-paginatorの値をサービスを通じて動的に設定することです。動的にmd-paginatorの値を設定しました

静的な値を使用してページネーションを作成できましたが、動的に設定する方法はわかりません。

Plunker

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> 

ExampleHttpDatabasepaginatorオブジェクトを渡すしようとしましたが、私はそれをconsoleとき、それは未定義言います。

答えて

4

値を動的に変更するには、変数を<md-paginator>の入力として使用します。これらの変数が変更されると、ページ変更担当者がそれらを選択してビューに表示します。

<md-paginator #paginator 
      [length]="myExampleLength" 
      [pageIndex]="myExamplePageIndex" 
      [pageSize]="myExamplePageSize" 
      [pageSizeOptions]="myExamplePageSizeOptions" 
      (page)="pageEvent = $event; onPaginateChange($event)"> 
</md-paginator> 
+0

私は何か試してみましたが、プランカを更新しましたが、残念ながら設定されている値は「未定義」です。あなたは見て、助けてもらえますか? –

+2

いくつかの問題は、 'pagerLength'とか' pageLength'と呼ばれることもあります。もっとも大きな問題は、右の 'this'コンテキストで' extractData'を呼び出さないということです。固定の例については、このplunkerをご覧ください:https://plnkr.co/edit/BBdEKJ4WnJVBetZR4AkY?p=preview –

+0

ありがとうございました..その問題を解決しました。 –

関連する問題