将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下用eval生成JSON对象
Sep 17 Javascript
JavaScript 原型链学习总结
Oct 29 Javascript
js模拟C#中List的简单实例
Mar 06 Javascript
JavaScript插件化开发教程 (三)
Jan 27 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
Javascript中字符串和数字的操作方法整理
Jan 22 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
js脚本编写简单刷票投票系统
Jun 27 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
JavaScript实现简单贪吃蛇效果
Mar 09 Javascript
vue实现列表滚动的过渡动画
Jun 29 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
Aug 27 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
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python单例模式的多种实现方法
2019/07/26 Python
Python解析json代码实例解析
2019/11/25 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
pycharm快捷键汇总
2020/02/14 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
普师专业个人自荐信范文
2013/11/26 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
财务总监岗位职责
2014/03/07 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
设计大赛策划方案
2014/06/13 职场文书
开票证明
2015/06/23 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电