分页组件一般只某个页面的一小部分,所以我们它是子组件

  • 当然如果你承认这话的,可以往下看,因为我把他当作子组建来写了

分页组件的模版

import { Component } from '@angular/core';
@Component({
selector : "page",
template :`
<div class="page ellipsis">
<ul class="pagination" *ngIf="pageList">
<li><a href="#" aria-label="Previous" class="prev"><span aria-hidden="true">&laquo;</span></a></li>
<li *ngFor="let list of pageList"><a href="#">{{ list.pageid }}</a></li>
<li (click)="Tomessage( icur+1 )"><a href="#" aria-label="Next" class="next"><span aria-hidden="true">&raquo;</span></a></li>
</ul>
</div>
`,
styleUrls: ['./page.css'] //css样式就是bootstrap的那个
})
export class PageComponent {}

在组件中生成 pageList = []; 模拟数据

    //数据结构如下
pageList = [
{
pageid: number = 1
}
{
pageid: number = 2
}
]
    //生成pageList的数组
getPageList () { //console.log(this.pageParams)
let total = 150;
let size = 10;
let icur = this.icur; //当前页码
let num = Math.ceil( total / size )
for ( var i = 0 ; i< num ;i++ ) {
if(num <= 5){
this.pageList.push({
pageid : i+1,
pageicur :icur
})
}else if( num - icur < 5 && icur > 4){
this.pageList = [
{
pageid: icur - 4,
pageicur :icur
}, {
pageid: icur - 3,
pageicur :icur
}, {
pageid: icur - 2,
pageicur :icur
}, {
pageid: icur - 1,
pageicur :icur
}, {
pageid: icur,
pageicur :icur
}
];
}else{
let cur = Math.floor((icur - 1) / 5) * 5 + 1
this.pageList = [
{
pageid: cur ,
pageicur :icur
}, {
pageid: cur + 1,
pageicur :icur
}, {
pageid: cur + 2,
pageicur :icur
}, {
pageid: cur + 3,
pageicur :icur
}, {
pageid: cur + 4,
pageicur :icur
}
]
}
} }

引入 装饰器Output 时间发射器EventEmitter 钩子函数的一种状态OnInit

    //如下所示
import { Component, Output, EventEmitter, OnInit } from '@angular/core';
  • 此时模版的结构---就变成这个样子了
import { Component, Output, EventEmitter, OnInit } from '@angular/core';
@Component({
selector : "page",
template :`
//....
`,
styleUrls: ['./page.css'] //css样式就是bootstrap的那个
})
export class PageComponent implements OnInit{
//这个数据应该是一步获得的
private pageList = [];
private icur = 1; //这里是私有变量 //组件初始化的时候调用该函数
ngOnInit(): void {
this.getPageList();
}
//分页函数
getPageList () { //.....
} }

此时组件的基本结构都有了,然后创建一个父组件

import { Component } from '@angular/core';

import { PageComponent } from "./son.component";  //别忘记在父组建中导入了
@Component({
selector: 'app-root',
template: `
<page> </page>
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
}

至此到这一步,应该可以看到一个效果图

! [page图] (http://images.cnblogs.com/cnblogs_com/he-zhi/1004820/o_2.png)

当然,现在这种东西很明显没有什么乱用,点击向上的话,就需要将icur这个值不断的增加

  • 此时就需要设计到子组件---> 父组件之间的通讯
    //需要一些什么东西呢 --这个装饰器@Output h还有事件发射器EventEmitter

    //PageComponent 中导入所需要的动西
import { Component, Output, EventEmitter, OnInit } from '@angular/core'; //第二步---实例化一个发射器
@Output() OnChange: EventEmitter<string> = new EventEmitter();
//注册一个事件,点击的时候出发
Tomessage(value: any){
this.OnChange.emit( value )
this.icur = value;
} //第三步需要到父组建中帮顶OnChange //AppComponent
import { Component } from '@angular/core'; import { PageComponent } from "./son.component"; //别忘记在父组建中导入了
@Component({
selector: 'app-root',
template: `
<page (OnChange)="any($num)"> </page> //这里有一$千万不能省略
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
any(num:any){
alert(num);
}
}

至此所有的注意点 基本标注了,以下是分页组件的全部完整demo

如果你想跑起来,你需要先使用 angular的脚手架创建一个项目结构

基本赋值黏贴就可以了,

关于子组建到---父组建的通讯,感觉太简单 就没有细说

子组建发射 --- 父组建接受


import { Component, Output, EventEmitter, OnInit } from '@angular/core';
@Component({
selector : "page",
template :`
<div class="page ellipsis">
<ul class="pagination" *ngIf="pageList">
<li><a href="#" aria-label="Previous" class="prev"><span aria-hidden="true">&laquo;</span></a></li>
<li *ngFor="let list of pageList"><a href="#">{{ list.pageid }}</a></li>
<li (click)="Tomessage( icur+1 )"><a href="#" aria-label="Next" class="next"><span aria-hidden="true">&raquo;</span></a></li>
</ul>
</div>
`,
styleUrls: ['./page.css'] //css样式就是bootstrap的那个
})
export class PageComponent implements OnInit{
@Output() OnChange: EventEmitter<string> = new EventEmitter(); Tomessage(value: any){
this.OnChange.emit( value )
this.icur = value;
} //这个数据应该是一步获得的
pageList = [];
icur = 1; //这里是全局变量 ngOnInit(): void {
this.getPageList();
}
//分页函数
getPageList () { //console.log(this.pageParams)
let total = 150;
let size = 10;
let icur = this.icur; //当前页码
let num = Math.ceil( total / size )
for ( var i = 0 ; i< num ;i++ ) {
if(num <= 5){
this.pageList.push({
pageid : i+1,
pageicur :icur
})
}else if( num - icur < 5 && icur > 4){
this.pageList = [
{
pageid: icur - 4,
pageicur :icur
}, {
pageid: icur - 3,
pageicur :icur
}, {
pageid: icur - 2,
pageicur :icur
}, {
pageid: icur - 1,
pageicur :icur
}, {
pageid: icur,
pageicur :icur
}
];
}else{
let cur = Math.floor((icur - 1) / 5) * 5 + 1
this.pageList = [
{
pageid: cur ,
pageicur :icur
}, {
pageid: cur + 1,
pageicur :icur
}, {
pageid: cur + 2,
pageicur :icur
}, {
pageid: cur + 3,
pageicur :icur
}, {
pageid: cur + 4,
pageicur :icur
}
]
}
} } }

基于angular4.0分页组件的更多相关文章

  1. 基于Vue封装分页组件

    使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} ...

  2. 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑

    eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...

  3. vue2.0分页组件,

    pagination.vue <!-- 表格分页组件 --> <template> <nav class="boot-nav"> <ul ...

  4. 超简单的vue2.0分页组件

    1.组件代码 <template> <div class="pagination_comment_style" style="width: 100%;o ...

  5. 基于bootstrap的分页组件-Bootstrap Paginator

    效果

  6. 基于 bootstrap 的 vue 分页组件

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

  7. Vue+element UI实现分页组件

    介绍 这是一个是基于element-UI的分页组件基础上,进行了二次封装的分页组件,在展示数据时,该分页组件采用了每显示一页数据,只请求当前页面的数据的请求策略,从而避免了一次性将数据全部请求所造成的 ...

  8. 基于vue2.0的分页组件开发

    今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...

  9. 基于vue2.0的一个分页组件

    分页组件在项目中经常要用到之前一直都是在网上找些jq的控件来用(逃..),最近几个项目用上vue了项目又刚好需要一个分页的功能.于是百度发现几篇文章介绍的实在方式有点复杂, 没耐心看自己动手造轮子写了 ...

随机推荐

  1. 学java网络编程的心得体会

    网络编程简单思路 一.发送端1创建udp服务,通过DatagramSocket对象;2确定数据,封装成包DatagramPacket(byte[] buf, int length, InetAddre ...

  2. 将C-风格字符串用作string对象引用参数

    string类定义了一种char*到string的转换功能,这使得可以使用C-风格字符串来初始化string对象. 类型为const引用的形参其中一个属性表明:假设实参的参数类型与引用参数不匹配,但可 ...

  3. 互联网金融P2P主业务场景自动化测试

            互联网金融P2P行业,近三年来发展迅速,如火如荼.         据不完全统计,全国有3000+的企业.  “互联网+”企业,几乎每天都会碰到一些奇奇怪怪的bug,作为在互联网企业工 ...

  4. .Net程序员学用Oracle系列(8):触发器、作业、序列、连接

    1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2.使用序列 & 删除序列 4.连接 4.1.创建连接 4.2.使 ...

  5. 更改maven中央仓库

    前言 1.由于原生的中央仓库 http://repo1.maven.org/maven2/,有一些包不在里面,目前流行的仓库有 http://mvnrepository.com/ 2.找出连接 2.1 ...

  6. 006开源O/R映射框架内容回顾

    Hibernate是一个O/R映射框架(也称为ORM) 从ORM词来看,O---Object(对象模型):R--- Relational(关联模型),可以做对象和关联的一种映射,当然这只是部分功能,一 ...

  7. Unity 遮罩 点击panel以外的位置,panel关闭

    public Class Panel_ATMRechage : IPanel{ private Dictionary<string,UISprite>mSprites; } protect ...

  8. RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World

    一.简介      RabbitMQ是一个消息的代理器,用于接收和发送消息,你可以这样想,他就是一个邮局,当您把需要寄送的邮件投递到邮筒之时,你可以确定的是邮递员先生肯定会把邮件发送到需要接收邮件的人 ...

  9. 关于 IDEA 自动识别问题,jsp页面Controller路径自动识别的问题

    idea之所以强大,就是强大的代码提示和联想功能,写起代码来简直不要太爽.但是这几天我发现在我的jsp页面中访问controller路径的时候不会自动提示了,对于这么严谨的我肯定要找出原因啊,哈哈. ...

  10. 连接Oracle数据库的时候报了“Got minus one from a read call”

    (转) 出现这种问题基本上就以下几种原因,可以查一下系统日志看看:1:数据库连接满了,扩大数据库连接池2:所登录的机子IP不在sqlnet.ora内,加入后重启listerner即可3:数据库负载均衡 ...