【问题标题】:Angular 8:mat pagination can not choose pageAngular 8:mat分页无法选择页面
【发布时间】:2021-07-01 06:15:03
【问题描述】:

我在 app.component.html 中的 mat-paginator:

<mat-paginator [pageSizeOptions]="[5, 15, 30]" [pageSize]="5" [length]="totalElements"
                      (page)="nextPage($event)">

</mat-paginator>

应用组件:

  totalElements = 5;

  // tslint:disable-next-line:typedef
  nextPage(event: PageEvent) {
    const request = {};
    // @ts-ignore
    request.page = event.pageIndex.toString();
    // @ts-ignore
    this.totalElements = request.size = event.pageSize.toString();
    // @ts-ignore
    this.getDevelopers(request);
  }

获取开发者:

  public getDevelopers(request: {page: string, size: string}): void {
    this.loading = true;
    this.developerService.getAllUsers(request)
      .subscribe(data => {
        // @ts-ignore
        this.users = data.content;
        // @ts-ignore
        this.totalElements = data.totalElements;
        this.loading = false;
      }
  }

我的控制器:

    @GetMapping
    @ResponseBody
    @ApiOperation(value = "Get list of all developers")
    public Page<GetByIdDeveloperResponse> getAllDevelopers(
            @RequestParam(name = "page", defaultValue = "0") int page,
            @RequestParam(name = "size", defaultValue = "4") int size,
            @RequestParam(name = "sort_by", defaultValue = "id") String sortBy
    ) {
        Page<GetByIdDeveloperResponse> developers = developerMapper.getDeveloperResponseListFromDeveloperList(developerService.getAllDevelopers(page, size, sortBy));
        return new PageImpl<GetByIdDeveloperResponse>(developers.getContent(), PageRequest.of(page, size), developers.getTotalElements());
    }

我可以更改页面大小,但无法打开其他页面。 不适合我

在邮递员中一切正常,但在这里不起作用。

我的服务方法看起来如何:

    public List<Developer> getAllDevelopers(int page, int size, String sortValue) {
        logger.info("Get all developers was called, page: " + page + " size: " + size + " sort by: " + sortValue);
        Pageable paging = PageRequest.of(page, size, Sort.by(sortValue));
        Page<Developer> pagedResult = developerRepository.findAll(paging);
        return pagedResult.getContent();
    }

存储库的外观:

@Repository
public interface DeveloperRepository extends PagingAndSortingRepository<Developer, String> {
    Developer findById(String id);
}

json 的样子:

当我尝试 GET .../developers?size=10

我总共有 10 个元素,我认为问题与 "totalPages": 1, 有关 因为即使我得到所有元素,也只有 1 页

调试:

【问题讨论】:

  • Angular 客户端的实际调用是什么?你在浏览器开发者工具中观察到了一个吗?如果您展示了developerService.getAllUsers(request) 实现(客户端),这也会很有用。
  • 已将 getAllDevelopers 添加到问题中。我在 intelij idea 中对其进行了测试。它成功发送请求,我在控制器中获得了大小并且它可以工作。但问题出在页面上。我就是不能点击这个按钮。角码有问题
  • @Rostyslav,告诉我们getAllDevelopers() api 返回什么?
  • @er-sho 我将其添加到问题中
  • @er-sho 我认为问题与 "totalPages": 1, 因为即使我得到所有元素,也只有 1 页

标签: javascript angular spring-boot


【解决方案1】:

当您执行return pagedResult.getContent() 时,您的服务方法中的分页结果数据(页码、页面大小等)会丢失。

考虑以下几点:

服务方式:

public Page<Developer> getAllDevelopers(int page, int size, String sortValue) {
    logger.info("Get all developers was called, page: " + page + " size: " + size + " sort by: " + sortValue);
    Pageable paging = PageRequest.of(page, size, Sort.by(sortValue));
    return developerRepository.findAll(paging);
}

控制器方法:

@GetMapping
@ApiOperation(value = "Get list of all developers")
public Page<GetByIdDeveloperResponse> getAllDevelopers(
        @RequestParam(name = "page", defaultValue = "0") int page,
        @RequestParam(name = "size", defaultValue = "4") int size,
        @RequestParam(name = "sort_by", defaultValue = "id") String sortBy
) {
    return this.developerService.getAllDevelopers(page, size, sortBy)
           .map(this.developerMapper::mapToGetByIdDeveloperResponse)
}

【讨论】:

  • 或者制作一个接受Page&lt;T&gt; 并返回Page&lt;R&gt; 的developerMapper 实现,准确复制所有源页面的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2019-12-15
  • 2015-07-30
相关资源
最近更新 更多