将angular-ui的分页组件封装成指令的方法详解


Posted in Javascript onMay 10, 2017

准备工作:

(1)一如既往的我还是使用了requireJS进行js代码的编译

(2)必须引入angualrJS , ui-bootstrap-tpls-1.3.2.js , bootstrap.css....

首先抛出几个问题:

a):何时回用到分页 (当后端返回的数据过多,一页装不满时,我们必须要采取分页的效果,给用户良好的视觉效果)

b):分页一般要传递哪些数据 (总的数据数量,每页固定显示多少条数据,当点击分页时候返回当前的页码.......这三条是必须的)

第一步:先完成指令的封装

我会在 js/directives/pagedir 此文件下完成指令的编写

pagedir.html(指令页面模板)

<div>

 <button class="btn btn-info" type="button" ng-click="setPage(3)">Set current page to: 3</button>

 <h6><code>rotate</code> defaulted to <code>true</code> and <code>force-ellipses</code> set to <code>true</code>:</h6>

 <uib-pagination class="pagination-sm" 分页函数="" ng-change="pageChanged()" 是否将当前页显示在中间="" rotate="true" 是否显示首页,和末页的数字="" boundary-link-numbers="true" 是否显示“.....”这几个点="" force-ellipses="true" 显示页码的页码tabs数量(不包含首页,末页)="" max-size="maxSize" 当前页="" ng-model="bigCurrentPage" 每页显示的数据条数="" 
="" items-per-page="pageSize" 总的数据记录数="" total-items="bigTotalItems" 

 =""> </uib-pagination>

 <pre>Page: {{bigCurrentPage}}/{{numPages}}</pre> 

</div>

pagedir.js(指令的操作js)

define(['app'],function(myapp){

 myapp.directive("pagedir",[function(){

  return{

    templateUrl:"js/directives/pagedir/pagedir.html",//指令的模板页面

    restrict:'AE',

    scope:{

     data:'=',   //用于获取页面控制器传回来的数据(例如:总得记录数,每页显示的数量等....)

     currentpage:'=', //返回当前页给页面控制器

    },

    link:function(s,el,attrs){

     

    },

    controller:['$scope','$log',function($scope,$log){

     $scope.bigTotalItems=$scope.data.bigTotalItems;

     $scope.pageSize=$scope.data.pageSize;

     $scope.bigCurrentPage=$scope.data.bigCurrentPage;

     $scope.numPages=$scope.data.numPages;

     $scope.maxSize=$scope.data.maxSize;

     $scope.setPage = function (pageNo) {//用于设置回到指定页

      $scope.bigCurrentPage = pageNo;

      console.log( $scope.bigCurrentPage);

     };

     $scope.pageChanged = function() {//用于返回当前页

      $log.log('Page changed to: ' + $scope.bigCurrentPage);

      console.log($scope.bigCurrentPage);

      $scope.currentpage=$scope.bigCurrentPage;//赋值,准备传给页面控制器,用于接口的取值

     };

    }],

  }

 }]);

});

第二步:明确使用地方

我打算在test.html页面上使用分页的功能(你可以在各个有多条数据现实的页面使用分页)

 test.html

<p>this is page dir</p>

<pagedir ng-click="getCurPage()" currentpage="currentpage" data="dataPage"> </pagedir>

对应的控制器:idea_test_ctrl

define(['app','directives/pagedir/pagedir'],function(myapp){

 myapp.controller("idea_test_ctrl",['$scope',function($scope){

  $scope.dataPage={ //用于分页的数据

   maxSize:5,     //显示五个页码按钮(不包括第一条,和最后一条)

   bigTotalItems:50,   //总的记录数(一般来源于接口的返回数据)

   bigCurrentPage:1,  //当前页码

   pageSize:5,    //每页显示的数据数量

   numPages:50/5,   //共有多少页

  };

  $scope.getCurPage=function(){

   console.log($scope.currentpage,"========================================");

   //接下来的调用后台接口,返回数据

   //...........................一系列的后续操作

  }

 }]);

}); 

最终页面的显示效果

将angular-ui的分页组件封装成指令的方法详解

顺便给出路由的配置

.state('home.ideas.test', {

    url: '/test',

    views: {

     "part": {

      templateUrl: 'tpls/ideas/test.html',

      controller:"idea_test_ctrl"

     }

    }

 })

总结一下:封装此指令的难点(假如你已经了解怎么使用angualr的指令了)

1>:如何双向传值的问题(在页面控制器设置的数值传递到分页模块控制器,以及每次点击分页怎么样将页码传回页面控制器用于调用接口的传参) 

一点分享:link链接方法与指令的controller有啥关系(貌似都可以进行数据的操作) 指令的控制器和link函数可以进行互换。控制器主要是用来提供可在指令间复用的行为,但链接函数只能在当前内部指令中定义行为,且无法在指令间复用.link函数可以将指令互相隔离开来,而controller则定义可复用的行为。 (指令是可以嵌套的,还记得我们指令中有一个require的属性吗?)

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript对象的property属性详解
Apr 01 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
Apr 25 Javascript
Jquery方式获取iframe页面中的 Dom元素
May 07 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
Nov 07 Javascript
使用layui 渲染table数据表格的实例代码
Aug 19 Javascript
在微信小程序中渲染HTML内容的方法示例
Sep 28 Javascript
解决JS表单验证只有第一个IF起作用的问题
Dec 04 Javascript
vue项目打包之后背景样式丢失的解决方案
Jan 17 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
Vue实现跑马灯效果
May 25 Javascript
详解VUE中的插值( Interpolation)语法
Oct 18 Javascript
vue-axios使用详解
May 10 #Javascript
详解axios在vue中的简单配置与使用
May 10 #Javascript
jQuery+PHP+Mysql实现抽奖程序
Apr 12 #jQuery
JavaScript实现form表单的多文件上传
Mar 27 #Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
May 10 #Javascript
利用PM2部署node.js项目的方法教程
May 10 #Javascript
全面解析vue中的数据双向绑定
May 10 #Javascript
You might like
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
详解php中 === 的使用
2016/10/24 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
python获取当前计算机cpu数量的方法
2015/04/18 Python
Python如何实现文本转语音
2016/08/08 Python
Python高斯消除矩阵
2019/01/02 Python
Python关于反射的实例代码分享
2020/02/20 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
物理教师自荐信范文
2013/12/28 职场文书
大学生志愿者感言
2014/01/15 职场文书
早读迟到检讨书
2014/01/24 职场文书
运动会邀请函范文
2014/02/06 职场文书
小学语文教学反思
2014/02/10 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
土地转让协议书
2014/09/27 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL