gpt4 book ai didi

angular - 将 ngx-pagination 实现为自定义组件

转载 作者:行者123 更新时间:2023-12-02 02:51:55 24 4
gpt4 key购买 nike

我有两个组件:

list.component和pagination组件,在list组件里面我想写listing记录的逻辑,我想用ngx-pagination npm package控制给定列表的分页:

list.component.html:

<table id="example" class="patients-listing">
<thead>
<tr>
<th>Member</th>
<th>Phone</th>
<th>Email</th>
<th>Action</th>

</tr>
</thead>
<tbody>
<tr *ngFor="let record of data['data'] | paginate: { id: 'server', itemsPerPage: 40, currentPage: patientsData['pagination']['current_page'], totalItems: patientsData['pagination']['total'] }">

<td>{{record.firstname}}</td>
<td>{{record.phone}}</td>
<td>{{record.email}}</td>
<td><a class="action" href="javascript:void">edit</a></td>
</tr>
</tbody>
</table>
<div class="group-pagination">
<pagination-control id= "server" maxSize="5" (pageChange)="getUsers($event)"></pagination-control>
</div>

list-component.ts

import { Component, OnInit, Input, AfterViewInit } from '@angular/core';
import { UserService } from '@app/services';

@Component({
selector: 'listing',
templateUrl: './list.component.html',
styleUrls: ['./list.component.scss']
})
export class ListMyPatientsComponent implements OnInit, AfterViewInit {

private currentPageNum = 1;
private perPage = 40;
data = null
constructor(private _userService: UserService) {
this.getUsers(this.currentPageNum);
}

ngOnInit() {


this._userService.currentUsersList$.subscribe((usersList)=>
{
if(usersList)
{
this.data = usersList
}

})
}

ngAfterViewInit()
{

}


getCareGroup(pageNum)
{

this._userService.triggerCallForUsers({"page":this.currentPageNum, "perPage":this.perPage})
}

}

到目前为止,我的服务器端分页工作得非常好。

现在我想使用 PaginationControlsDirective这样我就可以放分页模板到 list-pagination.component.html 然后我可以根据需要对此模板进行一些更改。但是当我写这个模板逻辑时list-pagination.component.html 然后将 pageChange 事件发送到 list.component 我没有得到正确的输出,我只收到分页号,例如 1 2 3... 35 > 甚至无法点击。

我在下面试过:

list-pagination.component.html:

<pagination-template id= "server" maxSize="5"  #pT="paginationApi"
(pageChange)="pageChanged()">

<div class="pagination-previous" [class.disabled]="pT.isFirstPage()">
<a *ngIf="!pT.isFirstPage()" (click)="pT.previous()"> < </a>
</div>

<div *ngFor="let page of pT.pages" [class.current]="pT.getCurrent() === page.value">
<a (click)="pT.setCurrent(page.value)" *ngIf="pT.getCurrent() !== page.value">
<span>{{ page.label }}</span>
</a>
<div *ngIf="pT.getCurrent() === page.value">
<span>{{ page.label }}</span>
</div>
</div>

<div class="pagination-next" [class.disabled]="pT.isLastPage()">
<a *ngIf="!pT.isLastPage()" (click)="pT.next()"> > </a>
</div>

</pagination-template>

list-pagination.component.ts:

import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'cg-pagination',
templateUrl: './list-pagination.component.html',
styleUrls: ['./list-pagination.component.scss']
})
export class PaginationComponent implements OnInit {
@Input() id: string;
@Input() maxSize: number;
@Output() pageChange: EventEmitter<number> = new EventEmitter<number>();
page = 1;

pageChanged(event){

this.pageChange.emit(event)
}
constructor() { }

ngOnInit() {
}


}

然后在列表组件中添加分页组件:

 <cg-pagination (pageChange)="getCareGroup($event)"></cg-pagination>

然后我只得到下面的分页输出:

pagination output

需要帮助以正确的方式实现它。

谢谢!

我的问题与此类似:

Ngx-pagination does not work for custom component但我没有得到答案中解释的内容。 OP已经自己回答了。

最佳答案

您的 ngx-pagination 模板 (pagination-template) 在您的组件中,并且不与 paginationApi 通信。它应该与您在其上使用 paginate 管道的列表存在于同一 View 中。像这样:

<div *ngFor="let item of items | paginate: config">{{itemContent}}</div>

<pagination-template #p="paginationApi" [id]="config.id"
(pageChange)="config.currentPage = $event">

<your-component [paginationData]="p"></your-component>

</pagination-template>

在您的组件内,扩展 paginationControls:

import { Component, Input } from '@angular/core';
import { PaginationControlsComponent, PaginationControlsDirective } from 'ngx-pagination';

@Component({
selector: 'your-component'
...
})

export class YourComponent extends PaginationControlsComponent {

@Input('paginationData') p: PaginationControlsDirective;

constructor() {
super()
}

}

这是 exemplified 在 ngx-pagination github 本身

关于angular - 将 ngx-pagination 实现为自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51870842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com