将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 获取元素位置的快速方法 getBoundingClientRect()
Nov 26 Javascript
20个非常有用的PHP类库 加速php开发
Jan 15 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
Jan 24 Javascript
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
jquery中子元素和后代元素的区别示例介绍
Apr 02 Javascript
jQuery前端分页示例分享
Feb 10 Javascript
vue-cli配置环境变量的方法
Jul 09 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
使用JavaScrip模拟实现仿京东搜索框功能
Oct 16 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
OpenLayers3实现图层控件功能
Sep 25 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
php生成二维码
2015/08/10 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
python分割和拼接字符串
2013/11/01 Python
Python程序设计入门(5)类的使用简介
2014/06/16 Python
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
详解Python高阶函数
2020/08/15 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
网络研修随笔感言
2014/02/17 职场文书
小学作文评语大全
2014/04/21 职场文书
活动总结范文
2014/08/30 职场文书
投标承诺函范文
2015/01/21 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB