将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封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
下拉菜单点击实现连接跳转功能的js代码
May 19 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
JavaScript对象创建模式实例汇总
Oct 03 Javascript
Bootstrap笔记—折叠实例代码
Mar 13 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
Jan 08 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
element-ui 设置菜单栏展开的方法
Aug 22 Javascript
浅谈Vue.use到底是什么鬼
Jan 21 Javascript
Electron整合React使用搭建开发环境的步骤详解
Jun 07 Javascript
原生JS中应该禁止出现的写法
May 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/28 PHP
php短址转换实现方法
2015/02/25 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
Python中实现三目运算的方法
2015/06/21 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
pandas重新生成索引的方法
2018/11/06 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
Django缓存系统实现过程解析
2019/08/02 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
会计专业推荐信
2013/10/29 职场文书
高一自我鉴定
2013/12/17 职场文书
副总经理任命书
2014/06/05 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
聘任书的格式及模板
2019/10/28 职场文书
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript