在 Angular 中单击分页结果时获取索引时出现问题

Issue getting index on click of paginated results in Angular

提问人:Sole 提问时间:5/24/2021 最后编辑:Sole 更新时间:5/24/2021 访问量:648

问:

我遇到了一些问题,在我的应用程序中,我有一些分页结果,但是当我在 ngFor 中添加变量 let i = index 时,我只能获得前 10 个项目的结果,而不是分页项目?因此,如果我转到第 2 页并单击第一项,索引再次为 1,因为我已经完成了索引 + 1。

到目前为止,代码是:

import { Component, VERSION, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  name = 'Angular ' + VERSION.major;
  collection: any;
  p: number;
  itemsPerPage = 10;
  totalItems: any;
  constructor(private http: HttpClient) {}

  ngOnInit() {
    this.getAllData();
  }

    getIndex(i) {
    console.log(i + 1);
  }

  getAllData() {
    const url = `https://xxxx/api/houses?page=1&pageSize=${this.itemsPerPage}`;
    this.http.get(url).subscribe((data: any) => {
      console.log(data);
      this.collection = data;
      this.totalItems = 450;
    });
  }

  getPage(page) {
    const url = `https://xxxx/api/houses?page=${page}&pageSize=${this.itemsPerPage}`;
    this.http.get(url).subscribe((data: any) => {
      console.log(data);
      this.collection = data;
      this.totalItems = 450;
    });
  }
}

component.html

<ul>
    <li *ngFor="let item of collection | paginate: { itemsPerPage: itemsPerPage , currentPage: p, totalItems: totalItems }  let i = index"> {{item.name}}                     <button (click)='getIndex(i)'>Index</button>
    </li>
</ul>

    <pagination-controls (pageChange)="getPage(p = $event)"></pagination-controls>

有什么想法吗?

JavaScript Angular 分页 服务器端

评论

0赞 eko 5/24/2021
应该发生什么?您要做什么?
0赞 Sole 5/24/2021
因此,当我单击“索引”按钮clickIndex时,它应该给我该项目的索引,但是目前,如果您查看stackblitz,它只给了我第一页项目的索引,如果我转到第2页并单击第1项,它仍然会给我数字1,而它应该是11

答:

1赞 eko 5/24/2021 #1

您可以像这样更新方法,以计算总索引,同时考虑分页:getIndex

  getIndex(i) {
    let pageCoefficient;
    if (!this.p || this.p === 1) {
      pageCoefficient = 0;
    } else {
      pageCoefficient = (this.p - 1) * this.itemsPerPage;
    }
    console.log(i + 1 + pageCoefficient);
    return i + 1 + pageCoefficient;
  }

堆栈闪电战

评论

0赞 Sole 5/24/2021
好的,太好了,但最初我使用索引值将值传递给路由器链接我怎样才能实现这一点?[routerLink]="['/details', i + 1]"
1赞 eko 5/24/2021
传递值?.这有什么问题?getIndex[routerLink]="['/details', getIndex(i)]"
0赞 Sole 5/24/2021
以未定义的形式返回
1赞 eko 5/24/2021
你正在返回值,对吧?我会更新我的答案
1赞 eko 5/24/2021
我也更新了堆栈闪电战;您现在可以在按钮中看到每个数字。