【问题标题】:ng2-pagination not firing page changeng2-pagination 不触发页面更改
【发布时间】:2017-03-31 18:07:11
【问题描述】:

所以我开始使用 Angular2 并尝试通过 ng2-pagination 组件添加分页,经过大量试验和错误后,我已经达到我的数据正确显示的阶段,分页控件显示正确但页面更改没有被解雇,所以我总是留在第一页。

这是我的html

  <div id="item_box" *ngFor="let item of listItems | paginate: 
           {itemsPerPage: 3, currentPage: page};">
             <! -- Elements to display my data items, all works OK -->
  </div>

    <div id="pager" class="pagination">
       <pagination-template #p="paginationApi" (pageChange)="pageChange.emit($event)">

       <ul>
          <li [class.disabled]="p.isFirstPage()">
               <a (click)="p.setCurrent(1)">First</a>
           </li>
           <li [class.disabled]="p.isFirstPage()">
               <a (click)="p.previous()">Previous</a>
            </li>


            <li *ngFor="let page of p.pages" [class.current]="p.getCurrent() === page.value">
                <a (click)="p.setCurrent(page.value)">{{page.value}}</a>
             </li>
             <li [class.disabled]="p.isLastPage()">
                 <a (click)="p.next()">Next</a>
             </li>
             <li [class.disabled]="p.isLastPage()">
                  <a (click)="p.getLastPage()">Last</a>
              </li>
         </ul>
    </pagination-template>
</div>

视觉上一切看起来都很好。

任何我的 list.component 代码

import { Component, OnInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';
import { Subscription } from 'rxjs';
import { Router, ActivatedRoute, Params } from "@angular/router";

import { PaginationModule } from 'ng2-bootstrap/components/pagination';


@Component({
  selector: 'app-list',
  templateUrl: './list.component.html',
  styleUrls: ['./list.component.css']
})

export class ListComponent implements OnInit, OnDestroy  {
  listItems = [];
  private subscription: Subscription;

@Input() id: string;
@Input() page;
@Input() maxSize: number;

@Output() pageChange: EventEmitter<number> = new EventEmitter<number>();

  constructor(private apiService:ApiService, private router:Router, private activatedRoute: ActivatedRoute)
  {

  }

  ngOnInit()
  {
     //Code removed for brevity, but here I execute WS and get data here, populated in this.listItems
     this.listItems == result;
     ...
  }

  ngOnDestroy() {
    this.subscription.unsubscribe();
  }
}

我没有收到任何错误。但是当我点击更改页面时,什么也没有发生。

我确信它一定很简单,我在某个地方错过了一些东西,但是什么和在哪里?

https://github.com/michaelbromley/ng2-pagination 上的示例/代码没有帮助,我发现的任何其他示例也没有帮助。

有什么想法吗?我做错了什么?

【问题讨论】:

  • 嗨。我是lib作者。问题:在 PaginatePipe 中,您设置了 currentPage: page - 我在您的代码中没有看到“页面”变量。它是作为输入传递的吗?目前,您的代码似乎只是重新发出 pageChange 事件,但我看不到任何会实际更改“page”值的部分 - 这必须发生才能使分页正常工作。
  • 嗨,迈克尔,是的,我在课堂上有过它,但在上面的代码中错过了它(复制过去的问题)。但这为我指明了正确的方向,我已经解决了这个问题。请参阅我在下面发布的答案

标签: angular pagination


【解决方案1】:

所以经过几个小时后,我设法解决了这个问题。

我无法让它与发射器一起工作,但在我的 html 中我改变了它;

<pagination-template #p="paginationApi" (pageChange)="pageChange.emit($event)">

到这里

<pagination-template #p="paginationApi" (pageChange)="onPageChange($event)">

然后我在我的代码中添加了这个;

  onPageChange(e)
  {
    if (e)
      this.page = e;
  }

然后我遇到了变量 page 没有被初始化的问题,所以我在构造函数中添加了这个

this.page = 1;

我不确定发射器为什么不能工作,由于我缺乏 Angular 的经验,所以我找不到这个,但现在这对我有用。

一个好的解决方案的证明是我能够将分页添加到另一个组件中,并且它在第一次工作时也没有任何问题!

【讨论】:

    【解决方案2】:

    你能检查一下物品清单吗? (例如,如果你有 9 个项目并且 itemsPerPage = 10)肯定它不会做任何事情:) 请验证发送到服务器的请求

    【讨论】:

    • 不,这不是问题所在。我已经在具有不同数量的项目的不同列表上尝试过此操作,并且为了测试,我将每页的项目数限制为 3。尽管有 > 20 个项目,但我遇到了问题。分页中显示的页数根据我拥有的项目数是正确的(并且每个列表都正确变化)
    • 我使用的是同一个库,它工作正常。但是我使用http与服务器通信。请求包含(itemsPerPage 和 currentPage),响应包含(服务器中的 totalItems 和链接到此页面的项目),在您的情况下,项目是静态的,因此每个请求只需要第一个项目。
    • 我不确定分页是否适用于静态项目列表(因为背后的想法是获取分段的完整列表)
    • 这些项目不是静态的,它们是通过网络服务检索的(为简洁起见,请参阅//删除代码)。但我没有做服务器分页。整个列表被检索并存储在 listItems
    • 好的。在官方文档中:totalItems [number] 集合中的项目总数。仅在进行服务器端分页时有用,其中集合大小限制为服务器 API 返回的单个页面。对于内存分页,不应设置此属性,因为它将自动设置为 collection.length 的值。所以尝试删除“totalItems”:)
    猜你喜欢
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2011-05-21
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多