ionic2实战-自定义分页组件

作者: 昵称已被使用_ | 来源:发表于2017-03-01 23:33 被阅读5475次

    前言

    • 分页组件是非常常用的一个功能,所以需要封装成一个公共组件,方便调用

    效果演示

    ionic2实战-自定义分页组件.gif

    核心代码

    • paging.html完整代码
    <ion-grid text-center *ngIf="total>pageSize">
      <ion-row>
        <ion-col no-padding>
          <button ion-button  small [color]="color" [disabled]="pageNum==1" (click)="btnClick(1)">首页</button>
          <button ion-button  small [color]="color" [disabled]="pageNum==1" (click)="btnClick(pageNum-1)">上一页
          </button>
          <button ion-button  small [color]="color" [disabled]="pageNum==ceil(total/pageSize)"
                  (click)="btnClick(pageNum+1)">下一页
          </button>
          <button ion-button  small [color]="color" [disabled]="pageNum==ceil(total/pageSize)"
                  (click)="btnClick(ceil(total/pageSize))">尾页
          </button>
        </ion-col>
      </ion-row>
      <ion-row>
        <ion-col no-padding style="font-size: 12px">
          每页显示{{pageSize}}条数据,共{{total}}条,当前为第{{pageNum}}页,共{{ceil(total/pageSize)}}页
        </ion-col>
      </ion-row>
    </ion-grid>
    
    
    • paging.ts完整代码
    import {Component, Input, Output, EventEmitter} from '@angular/core';
    import { IonicPage} from 'ionic-angular';
    import {PAGE_SIZE} from "../../providers/Constants";
    
    /**
     * @name 自定义分页组件
     * @description
     * @example <page-paging [total]="18" (pageNumChange)="doSearch($event)"></page-paging>
     * @example <page-paging [total]="total" (pageNumChange)="doSearch($event)" pageSize="10" color="dark"></page-paging>
     */
    @IonicPage()
    @Component({
      selector: 'page-paging',
      templateUrl: 'paging.html',
    })
    export class PagingPage {
    
      @Input()
      total:number;//共多少条数据
    
      @Input()
      pageSize:number=PAGE_SIZE;//每页大小,默认5条
    
      @Input()
      color:string='primary';//主题颜色
    
      @Input() pageNum:number=1;//当前第几页,默认1
      @Output() pageNumChange = new EventEmitter<any>();
    
    
      constructor() {
      }
    
      btnClick(pageNum){
        this.pageNum = pageNum;
        this.pageNumChange.emit(pageNum);
      }
    
      ceil(num){
        return Math.ceil(num);
      }
    
    }
    
    
    • paging.module.ts完整代码
    import { NgModule } from '@angular/core';
    import { IonicPageModule } from 'ionic-angular';
    import { PagingPage } from './paging';
    
    @NgModule({
      declarations: [
        PagingPage,
      ],
      imports: [
        IonicPageModule.forChild(PagingPage),
      ],
      exports: [
        PagingPage
      ]
    })
    export class PagingPageModule {}
    
    

    使用

    • 在需要用的模块中导入PagingPageModule

    • .html

    <page-paging [total]="18" (pageNumChange)="doSearch($event)"></page-paging>
    
    • .ts
     doSearch(pageNumber){
        console.log(pageNumber);
      }
    

    最后

    • 觉得样式丑的请自行修改pagination.html
    • 此文也展示了Angular自定义组件最常用的@Input()和 @Output()的用法,希望大家能举一反三写出更强大的组件
    • 更完整代码在github

    相关文章

      网友评论

      • EddyWorkHard:如果想要实现点击下一页,实现页面跳转,而不是在控制台输出页数,该怎么做呢大神?
        昵称已被使用_:如demo点击下一页会出发doSearch事件,那你在这个事件中跳转页面
      • 科了个技:博主你好,我按照官网写的demo自己写了一个自定义组件,但是在html里面引用报错,请问下这个错误你有碰到过吗
        core.es5.js:1084 ERROR Error: Uncaught (in promise): Error: Template parse errors:
        'toast-component' is not a known element:
        1. If 'toast-component' is an Angular component, then verify that it is part of this module.
        2. If 'toast-component' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress
      • 雁鸿_666:楼主你好,我自定义的load-img.directive.ts,我在其中的一个模块中使用正常在另外的一个子模块中再次引用的时候就会报错:Type loadImgDirective is part of the declarations of 2 modules: AnanCardModule and CarCardAllianceModule! Please consider moving loadImgDirective to a higher module that imports AnanCardModule and CarCardAllianceModule. You can also create a new NgModule that exports and includes loadImgDirective then import that NgModule in AnanCardModule and CarCardAllianceModule.
        后面我又新建了个 load-img.directive.module 调用的时候引入
        import { loadImgDirectiveModule } from '../../directives/load-img-directive/load-img.directive.module';
        报错:Can't bind to 'loadImg' since it isn't a known property of 'img'. ("
        引入无效
        请问您有碰到过类似问题吗 要怎么修改呢
        昵称已被使用_:@雁鸿_666 :+1:
        雁鸿_666:你好 对比了下你的文档 是因为我的页面 exports 没有添加directive 修改了下 可以用了
      • 2c556ee0e430:您好,这样的组件是在共享模块里面的,请问有了解过关于如何将组件 封装成 npm 包吗?就是类似于 ionic 封装在ionic-angular 里面的那些组件一样?
        昵称已被使用_:还没有研究过哦
      • cb7e5fb8535e:移动端,还是习惯 拉拽刷新, 拉到末尾加载更多,
        昵称已被使用_:@苟小文 这要看业务场景.

      本文标题:ionic2实战-自定义分页组件

      本文链接:https://www.haomeiwen.com/subject/xdiqgttx.html