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(),如:
      

   imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
RouterModule.forChild(homeRoutes),
PaginationModule.forRoot()
],

3.代码讲解

  第一步:创建分页组件

    ng g component pager

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

 <div>
<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>
</div>

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

 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';

 @Component({
selector: 'app-pager',
templateUrl: './pager.component.html',
styleUrls: ['./pager.component.css']
})
export class PagerComponent implements OnInit {
//存在多页,显示页码数量
maxSize:number = 3;
//每页展示条数
itemsPerPage:number = 15;
//总条数
@Input() totalItems:number;
//当前页码
@Input() currentPage:number;
//定义发射器,当页码变化时候,将变化后的数据发射出去,供监听者接收使用
@Output() pageChanges:EventEmitter<Page> = new EventEmitter(); pageChanged(event: any): void {
//通过发射器发射数据,数据包含在event中
this.pageChanges.emit(event);
} constructor() {} ngOnInit() {
} } export class Page{
constructor(
public itemsPerPage:number,
public page:number
){
this.itemsPerPage = 15;
this.page = 1;
}
}

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

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

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

    

 <div class="card-body" style="font-size:14px;">
<table class="table table-bordered ">
<thead>
<tr>
<th>序号</th>
<th>用户名称</th>
<th>邮箱</th>
<th>上次登录</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody >
<tr *ngFor="let user of users,let i = index;">
<td>{{(currentPage-1)*15+i+1}}</td>
<td>{{user.username}}</td>
<td>{{user.email}}</td>
<td>{{user.lastlogintime * 1000 | date:'yyyy-MM-dd HH:mm:ss'}}</td>
<td><span class="badge badge-success">已启用</span></td>
<td>
<a href="javascript:;" (click)="switchToCheckUser(user)">查看</a>
<a href="javascript:;" (click)="switchToEditUser(user)" style="margin-left:10px;">编辑</a>
<a href="javascript:;" (click)="deleteUser(user)" style="margin-left:10px;">删除</a>
</td>
</tr>
</tbody>
</table>
<app-pager [totalItems]="totalcounts" [currentPage]="currentPage" (pageChanges)="pageChanged($event)"></app-pager>
</div>

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

    

   //页码变化,重新获取用户列表数据
pageChanged(event){
//查看监听到的数据
console.log('event:',event);
this.currentPage = event.page;
this.itemsPerpage = event.itemsPerPage;
//重新获取用户列表数据
this.getUserData();
}

4.运行截图

  

5.备注

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

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

  

        

      

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

  1. Python自定义分页组件

    为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...

  2. Django框架---- 自定义分页组件

    分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...

  3. 基于 bootstrap 的 vue 分页组件

    申手党点这里下载示例 基于 bootstrap 的 vue 分页组件,我想会有那么一部分同学,在使用Vue的时候不使用单文件组件,因为不架设 NodeJS 服务端.那么网上流传的 *.vue 的各种分 ...

  4. vue 自定义分页组件

    vue2.5自定义分页组件,可设置每页显示条数,带跳转框直接跳转到相应页面 Pagination.vue 效果如下图: all: small(只显示数字和上一页和下一页): html <temp ...

  5. 基于 Python 的自定义分页组件

    基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...

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

    vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重 ...

  7. angular自定义分页组件(实用)

    功能描述:分页,点击按钮或者下一页获取分页接口,同时active到对应页码. html模块: <page page-count="totalPage" on-click-pa ...

  8. Flex4 自定义分页组件

    自己写的Flex4分页组件,去伪存真,只实现基本的分页功能,数据过滤神马的都不应该是分页组件干的活,有呆毛才有真相: [源代码下载] Flex自从转手给Apache后人气急跌,本人也很捉鸡,尽管Apa ...

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

    简单的两个步骤截可调用 <script src="<%=basePath%>/resources/js/jquery-1.7.1.min.js"></ ...

随机推荐

  1. JSX 和 template 随想

    就目前而言,我用到的前端页面开发框架主要有两种:以JSX为主的react和以template为主的vue. 虽然这两种方式各有千秋,但我其实更偏爱template多一些.为什么? 相较于灵活的JSX, ...

  2. Nginx 负载均衡和反向代理实践

    nginx 以哪个配置文件启动 Nginx 负载均衡和反向代理实践 环境介绍 192.168.1.50    在这台主机上配置Nginx 的反向代理,负载均衡,和web1,web1使用的81号端口 1 ...

  3. Linux巩固记录(8) Hbase shell 基本使用

    继续前几篇内容,讲解hbase基本使用 1.进入hbase shell: hbase有很多种操作方式,比如shell,java客户端,webUI等,可以直接输入hbase进行提示 [root@mast ...

  4. 组件基础(非父子组件传值)—Vue学习笔记

    最近几天忙着写Api去了,抽空把后面的内容下出来,然后再分享给大家web可以使用的api. 上次说了父子组件直接的传值,这次看一下非父子组件之间的传值(总线机制) 要实现非父子组件之间的传值非常重要的 ...

  5. C#递归方法遍历目录及子目录

    众所周知,获得某一目录下第一级的所有文件和文件夹列表,很容易办到:DirectoryInfo di=new DirectoryInfo(strBaseDir);//strBaseDir是起始目录,绝对 ...

  6. JS数组去重的几种常见方法

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  7. JVM中强引用,弱引用,软引用和幽灵引用的代码

    上代码: public class ReferenceTest { public static void main(String[] args) { //test1();//软引用 //test2() ...

  8. (转) argparse — 解析命令参数和选项

    原文地址:https://pythoncaff.com/docs/pymotw/argparse-command-line-option-and-argument-parsing/166 https: ...

  9. Android面试题(2)

    1.  int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型).Int是java的原始数据类型,Integer是java为int提供的封装类.Java为 ...

  10. Docker概念学习系列之Docker核心概念之容器container

    不多说,直接上干货! Docker 利用容器来运行应用. 容器是从镜像创建的运行实例. 它可以被启动.开始.停止.删除.每个容器都是相互隔离的.保证安全的平台. 可以把容器看做是一个简易版的 Linu ...