angular分页指令操作


Posted in Javascript onJanuary 09, 2017

目前的多个项目中都用到分页这个功能,为了提高可复用性,我特地分离出来写了个分页的指令。直接贴代码,详情如下:

index.html

<body id="sBill" ng-controller="map_ctrl">
  <table class="table table-striped" style="margin: 0px;border:1px solid #ccc;width:800px;min-height:200px;">      
   <tbody> 
     <tr ng-repeat="l in orderList"> 
       <td><input type="radio" name="id" ng-click="select(l.id)" value="{{l.id}}" /></td> 
       <td>{{l.time}}</td>         
     </tr> 
   </tbody> 
  </table> 
  <!-- paging datalist属性值(dataList)为要分页的原始数据--> 
  <rj-date datalist="dataList"></rj-date> 

 </body>

index.js

var app = angular.module("doSBill",[]);

app.controller("map_ctrl",function($scope,$http,$location,$timeout){ 
  // 原始数据
  $scope.dataList=[
  {'time':1},{'time':2},{'time':3},{'time':4},{'time':5},{'time':6},{'time':7},{'time':8},{'time':9},{'time':10},
  {'time':11},{'time':12},{'time':13},{'time':14},{'time':15},{'time':16},{'time':17},{'time':18},{'time':19},{'time':20},
  {'time':21},{'time':22},{'time':23},{'time':24},{'time':25},{'time':26},{'time':27},{'time':28},{'time':29},{'time':30},
  {'time':31}
  ];
  //$on:监听或接收数据;此处用于监听分页指令,修改的列表视图数据
  $scope.$on("orderList", function(e, orderList){
   $scope.orderList = orderList;
  });

});

 指令模板  page.html

<div>
 <p>
  <span>
   总记录数:<span class="rjAllNums" ng-bind="page.nums"></span>
   本页记录数:<span class="rjNowNums" ng-bind="page.nowNums"></span>
  </span>
  <button class="rjFirtPage" ng-click="jumpPage(1,dataList)">首页</button>
  <button class="rjPrePage" ng-click="jumpPage(page.now-1,dataList)">上一页</button>
  <span>
   <span class="rjNowPage" ng-bind="page.now"></span>/
   <span class="rjAllPage" ng-bind="page.pageCount"></span>
  </span>
  <button class="rjNextPage" ng-click="jumpPage(page.now+1,dataList)">下一页</button>
  <button class="rjLastPage" ng-click="jumpPage(page.pageCount,dataList)">尾页</button>
  到第 
  <input class="rjJumpInput" type="text" ng-model="page.jumpPage" name="rjPageName" value=""/>
   页
  <button class="rjJumpBtn" ng-click="jumpPage(page.jumpPage,dataList)">确定</button>
 </p>

</div>

指令定义page.js

app.directive('rjDate',function(){
    return {
      restrict: 'EA',  
      replace: false,
      scope : {dataList:'=datalist'},//设置scope.dataList与指令属性“datalist”值绑定,详情看指令scop作用域      
      templateUrl: 'pageDirective/template/page.html',  
      link: function(scope,elem,attr){

        var page={};//分页对象
        scope.page=page;
        scope.page.onePageNums=10; //每页记录数
        scope.page.nums=0;
        scope.page.now=1;
        scope.page.nowNums=0;
        scope.page.pageCount=1;
        scope.getPage=getPage; //设置获取页面的ng-click
        scope.page.orderList=[];

        getPage(1,scope.dataList);//初始化获取第一页数据

        scope.jumpPage=function(page,dataList){    
          if(!parseInt(page)){
           return null;
          }
          getPage(page,dataList);
         }
        function getPage(pageNow,dataList){//获取指定的页面     
           scope.page.nums=dataList.length; //设置总记录数
           scope.page.now=pageNow;//设置当前是第几页
           pagination();//设置当前有多少页面 生成一个页面数组
           scope.page.orderList=getOnePage(dataList);//获取一页的数据
           scope.$emit("orderList", scope.page.orderList);//$emit:子传父,传递event与data;此处用于给父controller传递数据orderList  
        }
        
        function getOnePage(arr){//获取一页的数据
          if(arr==null){           
           return null;
          } 
          var newarr=new Array();
          if(scope.page.now<1){
            scope.page.now=1;
          }
          if(scope.page.now>scope.page.pageCount){
            scope.page.now=scope.page.pageCount;
          }
          scope.page.nowNums=scope.page.onePageNums;
          var pagenow=scope.page.now; 

          var begin=(pagenow-1)*scope.page.onePageNums;                 
          var end=begin+scope.page.onePageNums;
          var lens=scope.page.nums;

          if(end>lens){
            end=lens;
            scope.page.nowNums=lens-begin;
          }
                
          for(begin;begin<end;begin++){
            newarr.push(arr[begin]);
          }
            return newarr;
        }
        function pagination(){//设置当前有多少页面 生成一个页面数组
          if(scope.page.nums<=scope.page.onePageNums){
            scope.page.pageCount=1;
          }else{
            if(scope.page.nums%scope.page.onePageNums==0){
              scope.page.pageCount=scope.page.nums/scope.page.onePageNums;
            }else{
              scope.page.pageCount=parseInt(scope.page.nums/scope.page.onePageNums)+1;
            }
          }
        }
        
      }
    }
  });

 效果如图所示:

angular分页指令操作

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 阻止javascript事件冒泡,获取控件ID值
Jun 27 Javascript
IE iframe的onload方法分析小结
Jan 07 Javascript
javascript获取下拉列表框当中的文本值示例代码
Jul 31 Javascript
微信小程序 开发指南详解
Sep 27 Javascript
Bootstrap Table列宽拖动的方法
Aug 15 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
React降级配置及Ant Design配置详解
Dec 27 Javascript
玩转Koa之核心原理分析
Dec 29 Javascript
解决layer.open后laydate失效的问题
Sep 06 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
JavaScript 反射学习技巧
Oct 16 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 #Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
Jan 08 #Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
Jan 08 #Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
Jan 08 #Javascript
Javascript 实现计算器时间功能详解及实例(二)
Jan 08 #Javascript
JS 实现计算器详解及实例代码(一)
Jan 08 #Javascript
详解百度百科目录导航树小插件
Jan 08 #Javascript
You might like
php pthreads多线程的安装与使用
2016/01/19 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
Vue性能优化的方法
2020/07/30 Javascript
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
Python中pillow知识点学习
2018/04/30 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
高分子材料与工程专业个人求职信
2013/12/15 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
教室布置标语
2014/06/26 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
特岗教师个人总结
2015/02/10 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS