由于群里很多人问 NG2 分页怎么做.我在这里做个 demo
基本组件结构
主路由组件 注入 service providers: [ROUTER_PROVIDERS, PagerService, HTTP_PROVIDERS]
组件主体分为
- list
- footer
<app-test-list></app-test-list> |
list 组件
主要是 Rxjs 实现,所以采用 onPush
@Component({ |
这里直接 Observable 放到 template 上
- numbers 就是显示数据的数组
footer 组件
@Component({ |
- numbers 就是计算出的 footer 数组
- currentPage 额外现实个当前的页号,方便验证
services 主体解析
import { Injectable } from '@angular/core'; |
几个流说下:
- currentPage$ 这个是点击 footer 的时候留出当前是第几页
<div class="pager"> |
changePage(e) { |
看下这里通过 click 把当前的页数传出去
- data$ 请求到总数据数组 – 这个实际项目中应该单独一个 module 去做
- userNumber$ 是根据总数据数据得到数据的数量,为了后面计算 footer 的数组
- footerItem$ 这个就是计算 footer 里最多是多少页
- footerArray$ 通过 footerItem$ 来产生一个数组的流
- displayItems$ 根据当前选中的页号和总数据来筛选出当前页需要显示的数据
这里 hardcode 了一个每页显示的数量 numEachPage: number = 3;
源码地址: https://github.com/dreambo8563/rx-paginationDemo/tree/master
改进
经过群友指点,创建 array 的方法改为如下,cool
this.footerArray$ = this.footerItem$.flatMap(x => { |