将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 相关文章推荐
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
基于iframe实现类似于ajax的页面无刷新
May 31 Javascript
JavaScript每天必学之事件
Sep 18 Javascript
JavaScript  event对象整理及详细介绍
Oct 10 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
Nov 23 Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
JS沙箱模式实例分析
Sep 04 Javascript
解决Mac安装thrift因bison报错的问题
May 17 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
js实现转动骰子模型
Oct 24 Javascript
VueX模块的具体使用(小白教程)
Jun 05 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
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
python动态性强类型用法实例
2015/05/09 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
机械工程师岗位职责
2014/06/16 职场文书
新农村建设标语
2014/06/24 职场文书
教育教学工作反思
2016/02/24 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers