Angular4.+ ngx-bootstrap Pagination 自定义分页组件

Angular4 随笔(二)  ——自定义分页组件

1.简介

  本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现。

  基本逻辑:

    1.创建一个分页组件,如:ng g component  pager

    2.父组件调用子组件,并向子组件传入基础配置信息

    3.分页组件接收父组件传参,并在模板上进行配置,在html模板上定义点击事件,调用分页子组件自身一个方法

4.分页组件定义发射器,当页码发生变化时,发射通知

    5.父组件模板调用分页组件处,监听分页组件发射方法,并调用自身组件方法,接收分页组件发射携带的数据,执行自身业务逻辑

2.准备工作

  第一步:搭建Angular4 环境,可以参考 我的博客 《Angular环境搭建

  第二步:安装ngx-bootstrap插件

      使用Bootstrap4:

        打开命令窗口,在当前项目下运行指令 npm install ngx-bootstrap --save (推荐)

      使用Bootstrap3:

        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

  第三步:注入PaginationModule

      在当前调用分页组件所在模块ts文件中导入 PaginationModule 模块,如下:

        import { PaginationModule } from ‘ngx-bootstrap/pagination‘;

      并在import:[]中注入PaginationModule.forRoot(),如:

      

1   imports: [
2     CommonModule,
3     FormsModule,
4     ReactiveFormsModule,
5     RouterModule.forChild(homeRoutes),
6     PaginationModule.forRoot()
7   ],

3.代码讲解

  第一步:创建分页组件

    ng g component pager

  第二步:编写分页组件模板

1 <div>
2     <pagination [totalItems]="totalItems"  [(ngModel)]="currentPage"  [itemsPerPage]="itemsPerPage" [maxSize]="maxSize" (pageChanged)="pageChanged($event)"  previousText="&lsaquo;" nextText="&rsaquo;" [boundaryLinks]="true" firstText="&laquo;"  lastText="&raquo;"  style="text-align: center;position: relative;left: 40%;"></pagination>
3 </div>

  第三步:分页组件ts文件代码,如下:

 1 import { Component, OnInit, Input, Output, EventEmitter } from ‘@angular/core‘;
 2
 3 @Component({
 4   selector: ‘app-pager‘,
 5   templateUrl: ‘./pager.component.html‘,
 6   styleUrls: [‘./pager.component.css‘]
 7 })
 8 export class PagerComponent implements OnInit {
 9   //存在多页,显示页码数量
10   maxSize:number = 3;
11   //每页展示条数
12   itemsPerPage:number = 15;
13   //总条数
14   @Input() totalItems:number;
15   //当前页码
16   @Input() currentPage:number;
17   //定义发射器,当页码变化时候,将变化后的数据发射出去,供监听者接收使用
18   @Output() pageChanges:EventEmitter<Page> = new EventEmitter();
19
20   pageChanged(event: any): void {
21     //通过发射器发射数据,数据包含在event中
22     this.pageChanges.emit(event);
23   }
24
25   constructor() {}
26
27   ngOnInit() {
28   }
29
30
31 }
32
33 export class Page{
34   constructor(
35     public itemsPerPage:number,
36     public page:number
37   ){
38     this.itemsPerPage = 15;
39     this.page = 1;
40   }
41 }

  第四步:父组件ts文件中配置传入分页组件配置项,如:

1   //分页组件配置项
2   private itemsPerpage:number ;
3   //总条数
4   private totalcounts:number;
5   //当前页码
6   private currentPage:number = 1;

  第五步:父组件htaml模板调用子组件,代码如下:

    

 1 <div class="card-body" style="font-size:14px;">
 2    <table class="table table-bordered ">
 3        <thead>
 4           <tr>
 5              <th>序号</th>
 6              <th>用户名称</th>
 7               <th>邮箱</th>
 8               <th>上次登录</th>
 9               <th>状态</th>
10               <th>操作</th>
11           </tr>
12         </thead>
13         <tbody >
14            <tr *ngFor="let user of users,let i = index;">
15                <td>{{(currentPage-1)*15+i+1}}</td>
16                <td>{{user.username}}</td>
17                <td>{{user.email}}</td>
18                <td>{{user.lastlogintime * 1000 | date:‘yyyy-MM-dd HH:mm:ss‘}}</td>
19                <td><span class="badge badge-success">已启用</span></td>
20                <td>
21                   <a href="javascript:;" (click)="switchToCheckUser(user)">查看</a>
22                   <a href="javascript:;" (click)="switchToEditUser(user)" style="margin-left:10px;">编辑</a>
23                   <a href="javascript:;" (click)="deleteUser(user)" style="margin-left:10px;">删除</a>
24                </td>
25            </tr>
26          </tbody>
27      </table>
28      <app-pager [totalItems]="totalcounts" [currentPage]="currentPage" (pageChanges)="pageChanged($event)"></app-pager>
29 </div>

  第六步:父组件定义监听页码变化的 pageChanged($event)方法,代码如下:

    

1   //页码变化,重新获取用户列表数据
2   pageChanged(event){
3     //查看监听到的数据
4     console.log(‘event:‘,event);
5     this.currentPage = event.page;
6     this.itemsPerpage = event.itemsPerPage;
7     //重新获取用户列表数据
8     this.getUserData();
9   }

4.运行截图

  

5.备注

  1.关于ngx-bootstrap使用,可以参考 http://ngx-bootstrap.com/

  2.关于分页模板使用可以参考http://ngx-bootstrap.com/

  

        

      

原文地址:https://www.cnblogs.com/mycnblogs-guoguo/p/9680202.html

时间: 2024-09-29 08:59:04

Angular4.+ ngx-bootstrap Pagination 自定义分页组件的相关文章

vue自定义分页组件---切图网

vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重新切图,重新VUE开发的项目来说,自定义分页组件才是应万变的最佳打开方式. html <template> <div class="pagination" v-if="totalPage>1"> <span v-if="!s

extjs_09_自定义分页组件

1.项目截图 2.CustomSizePagingToolbar.js Ext.define("Ext.ux.CustomSizePagingToolbar", {// 定义的名字要和文件的名字大小写一样 extend : "Ext.toolbar.Paging", alias : "widget.custompaging",// 别名 beforSizeText : "每页", afterSizeText : "条

DJANGO 自定义分页组件

第一次在码云上面分享代码片段,记录一下: https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90 class Pagination(object): def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7): # 传入: # -所有数据的个数 totalCount self.totalCount = totalCount # -当前页 curren

jquery ajax自定义分页组件(jquery.loehpagerv1.0)原创

简单的两个步骤即可实现分页功能 <script src="<%=basePath%>/resources/js/jquery-1.7.1.min.js"></script> <script src="<%=basePath%>/resources/js/jquery.loehpagerv1.0.js"></script> <script type="text/JavaScript

8.2 Django 分页组件替换自定义分页

Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """ class Pagination(object): def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ): """ 封装分页相关数据 :par

drf - 偏移分页组件 LimitOffsetPagination

目录 数据准备 分页组件部分源码分析一 自定义分页组件 分页组件部分源码分析二 数据准备 model.py文件 定义两个表Car表和Brand表,其中Car中的brand字段外键关联Brand表 from django.db import models class BaseModel(models.Model): is_delete = models.BooleanField(default=False) create_time = models.DateTimeField(auto_now_a

JQuery 常用积累(二)Pagination 分页组件

官方Demo网址:http://mricle.com/JqueryPagination 分页组件几乎是一般网站都会涉及到的组件,网上有很多这样的插件,自己挑来跳去选择了这一款,功能强大,可扩展性比较强,而且幕后的工程师一直在完善这个插件,不废话了,上干货. (模拟场景:商店网站,俺要根据用户选择的查询条件,来查询数据库,并展示到前台) 1.JSP页面: 如果你的web项目前台是基于bootstrap,js只需要引入2个js: <r:script path="/style/js/Jquery

签发token、校验token、多方式登录签发token的实现、自定义认证反爬规则的认证类、admin使用自定义User表:新增用户密码密文、群查接口各种筛选组件数据准备、drf搜索过滤组件、drf排序过滤组件、drf基础分页组件

签发token 源码入口 # 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口 # 1)rest_framework_jwt.views.ObtainJSONWebToken 的 父类 JSONWebTokenAPIView 的 post 方法 # 接收有username.password的post请求 # 2)post方法将请求得到的数据交给 rest_framework_jwt.serializer.JSONWebTokenSerializer 处

第二百零九节,jQuery EasyUI,Pagination(分页)组件

jQuery EasyUI,Pagination(分页)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Pagination(分页)组件的使用方法,这个组件依赖于 LinkButton(按钮)组件.