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

 更新时间:2017年05月10日 11:01:55   作者:你的一灯  
这篇文章主要给大家介绍了将angular-ui的分页组件封装成指令的方法,文中介绍的非常详细,相信会对大家的学习或者工作觉有一定的参考价值,需要的朋友下面来一起看看吧。

准备工作:

(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,"========================================");

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

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

  }

 }]);

});  

最终页面的显示效果

顺便给出路由的配置

.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的属性吗?)

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

相关文章

  • Angular中sweetalert弹框的基本使用教程

    Angular中sweetalert弹框的基本使用教程

    这篇文章主要给大家介绍了关于Angular中sweetalert弹框的基本使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 举例简介AngularJS的内部语言环境

    举例简介AngularJS的内部语言环境

    这篇文章主要介绍了AngularJS的内部语言环境,展示不同语言环境下对货币或是日期等文本方面所产生的影响,需要的朋友可以参考下
    2015-06-06
  • Angular2中监听数据更新的方法

    Angular2中监听数据更新的方法

    今天小编就为大家分享一篇Angular2中监听数据更新的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Angular项目中$scope.$apply()方法的使用详解

    Angular项目中$scope.$apply()方法的使用详解

    这篇文章主要给大家介绍了关于Angular项目中$scope.$apply()方法使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Angularjs具有一定的参考学习价值,需要的朋友们下面跟着小编一起来看看吧。
    2017-07-07
  • angular4 如何在全局设置路由跳转动画的方法

    angular4 如何在全局设置路由跳转动画的方法

    本篇文章主要介绍了angular4 如何在全局设置路由跳转动画的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • AngularJS入门教程之链接与图片模板详解

    AngularJS入门教程之链接与图片模板详解

    本文主要介绍 AngularJS 链接与图片模板的知识,这里整理了相关资料及示例代码,有兴趣的小伙伴可以参考下
    2016-08-08
  • 在Angular中使用innerHTML属性绑定的方法

    在Angular中使用innerHTML属性绑定的方法

    Angular 2+ 支持使用 [innerHTML] 属性绑定来渲染 HTML,如果你使用插值,它会被视为字符串,本文将介绍如何使用 [innerHTML] 以及一些注意事项,需要的朋友可以参考下
    2024-02-02
  • angular 服务的单例模式(依赖注入模式下)详解

    angular 服务的单例模式(依赖注入模式下)详解

    这篇文章主要介绍了angular 服务的单例模式(依赖注入模式下)详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • AngularJS 入门教程之HTML DOM实例详解

    AngularJS 入门教程之HTML DOM实例详解

    本文主要介绍AngularJS HTML DOM,这里帮大家整理了详细的资料,并附实例代码详细讲解,有需要的小伙伴可以参考下
    2016-07-07
  • AngularJs Injecting Services Into Controllers详解

    AngularJs Injecting Services Into Controllers详解

    本文主要介绍AngularJs Injecting Services Into Controllers的知识,这里整理了一下相关资料,及示例代码,帮助大家学习和理解,有兴趣的小伙伴可以参考下
    2016-09-09

最新评论