亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

學習Angularjs分頁指令

2019-11-20 09:34:25
字體:
來源:轉載
供稿:網友

在項目中許多頁面都用到了分頁,然后每個頁面都有許多重復的分頁代碼,于是自己寫了一份簡易的分頁指令,簡化頁面的代碼,且容易維護,寫在博客中當做備份,方便以后查閱。
以下是定義指令及其應用的步驟:

1.指令定義
定義一個js文件,page-directive.js,用來寫分頁的指令代碼,這個文件中包含了分頁的模板,以下是js文件中的所有代碼:

'use strict';(function () { angular.module('template/pageInit/pageInit.html', []).run([  '$templateCache',function($templateCache) {   $templateCache.put('template/pageInit/pageInit.html',    '<ul class="pagination-main">/n'+    ' <li class="prev-page" ng-class="{disabled:pageData.currentPage==1}" title="首頁">/n'+    '  <a href="javascript:void(0);" ng-click="on_loadPage(1)"><span class="fa fa-fast-backward"></span></a>/n'+    ' </li>/n'+    ' <li class="prev-page" ng-class="{disabled:pageData.currentPage==1 }">/n'+    '  <a href="javascript:void(0);" ng-click="on_prev()" title="上一頁"><span class="fa fa-step-backward"></span></a>/n'+    ' </li>/n'+    ' <li class="data-page" ng-repeat="page in pageData.pages" ng-class="{/'first-page/': page==1, /'last-page/': page==pageData.totalPage}">/n'+    '  <a ng-if="page!=/'.../'" href="javascript:void(0);" ng-class="{/'bg-custom/': page==pageData.currentPage}" ng-click="on_loadPage(page, tabData)">{{ page }}</a>/n'+    '  <a ng-if="page==/'.../'" href="javascript:void(0);" ng-class="{/'bg-custom/': page==pageData.currentPage}" ng-click="">{{ page }}</a>/n'+    ' </li>/n'+    ' <li class="next-page" ng-class="{disabled:pageData.currentPage==pageData.totalPage}">/n'+    '  <a href="javascript:void(0);" ng-click="on_next()" title="下一頁"><span class="fa fa-step-forward"></span></a>/n'+    ' </li>/n'+    ' <li class="skip-page"><div><input type="text" placeholder="" ng-model="inpage">/n'+    '  <input type="button" value="跳轉" ng-click="on_loadPage(inpage)"></div>/n'+    ' </li>/n'+    ' <li class="data-num"><a class="cursor-text" href="#"><span>共{{pageData.count}}條</span></a></li>/n'+    '</ul>/n'+    ''   );  } ]); angular.module('pageInit', ['template/pageInit/pageInit.html'])  .directive('pageInit',['pageinitTemplate', function(pageinitTemplate) {   return {    restrict  : 'AE',    templateUrl: function (tElement, tAttrs) {     return tAttrs.templateUrl || pageinitTemplate.getPath();    },    replace  : true,    scope   : {     pageData    : '=',     prev      : '&',     next      : '&',     loadPage    : '&'    },    link      : function(scope, element, attrs) {     scope.on_prev = function() {      if(scope.prev) {       scope.prev();      }     };     scope.on_next = function() {      if(scope.next) {       scope.next();      }     };     scope.on_loadPage = function(page) {      scope.inpage = undefined;      if(scope.loadPage) {       scope.loadPage({page: page});      }     };    }   };  }])  .provider('pageinitTemplate', function () {   var templatePath = 'template/pageInit/pageInit.html';   this.setPath = function (path) {    templatePath = path;   };   this.$get = function () {    return {     getPath: function () {      return templatePath;     }    };   };  });}).call(window);

2.分頁樣式控制
建議寫在單獨的.css文件中,首先新建pageSync.css文件,以下是具體樣式

.pagination-main { display: inline-block; padding-left: 0; margin: 0 0; border-radius: 4px; vertical-align: middle;}.pagination-main li.prev-page > a { border: 0;}.pagination-main li.next-page > a { border: 0; border-left: 1px; margin-left: 0;}.pagination-main li.first-page > a { border-top-left-radius: 0; border-bottom-left-radius: 0;}.pagination-main li.last-page > a { border-top-right-radius: 0; border-bottom-right-radius: 0;}.pagination-main li div { width: 80px;border: 1px solid #DDDDDD;background-color: #ffffff;float: left;padding: 0;}.pagination-main li.skip-page input[type='text'] { width: 24px;height: 20px;border: 0;text-align: center;}.pagination-main li.skip-page input[type='button'] { padding: 0 4px 1px 10px;border: 0;border-left: 1px solid #dddddd;background-color: #ffffff}.pagination-main li.data-num > a { border: 0; margin-left: 0;}.pagination-main > li { display: inline;}.pagination-main > li:first-child > a,.pagination-main > li:first-child > span { /*margin-left: 0; border-top-left-radius: 4px; border-bottom-left-radius: 4px;*/}.pagination-main > .active > a,.pagination-main > .active > span,.pagination-main > .active > a:hover,.pagination-main > .active > span:hover,.pagination-main > .active > a:focus,.pagination-main > .active > span:focus { z-index: 2; color: #fff; cursor: default; background-color: #428bca; border-color: #428bca;}.pagination-main > li > a,.pagination-main > li > span { position: relative; float: left; /*padding: 6px 12px;*/ padding: 1px 8px; margin-left: -1px; line-height: 1.42857143; color: #428bca; text-decoration: none; background-color: #fff; border: 1px solid #ddd;}.pagination-main > .disabled > span,.pagination-main > .disabled > span:hover,.pagination-main > .disabled > span:focus,.pagination-main > .disabled > a,.pagination-main > .disabled > a:hover,.pagination-main > .disabled > a:focus { color: #999; cursor: not-allowed; background-color: #fff; border-color: #ddd;}

3.分頁查詢方法
我在factory中自定義了分頁查詢的方法,共用,方便代碼的維護。在angular中與后臺的交互默認是異步的,我這里寫成同步查詢了,首先定義js文件pageSync.service.js,以下是factory的全部內容:

'use strict';angular.module('app').factory('PageSync', ['$http', '$q', function Page($http, $q) { var rowCollectionPage = []; var totalPage = 1; var pages = []; var endPage = 1; var load = function(url, currentPage, pageSize,deferred) {  var json = {rowCollectionPage: [], totalPage: 1, currentPage:currentPage ? currentPage:1, pages: []};  $http.get(url).success(function(rows) {   rowCollectionPage = setPageRow(rows.list, pageSize);   // 獲取總頁數   totalPage = Math.ceil(rows.count / pageSize);   endPage = totalPage;   // 生成數字鏈接   if (totalPage <= 7) {    pages = getPagesLow(totalPage);   } else {    pages = getPagesHigh(currentPage, totalPage);   }   json.rowCollectionPage = rowCollectionPage;   json.totalPage = totalPage==0 ? 1 : totalPage;   json.currentPage = currentPage;   json.pages = pages;   json.count = rows.count;   json.pageSize = pageSize;   /**    * 自定義字段,初始化的時候為before,只要經過該分頁方法,則字段值變為after    * before表示未經過該分頁方法,after表示經過該分頁方法,    * 前臺頁面加載的規則:為before時表示表格無數據,為after且pataData.count==0時無數據,否則視為有數據,    * 也可以說是記錄的一個時間狀態(訪問數據前及返回數據后)    */   json.loadTime = 'after';   deferred.resolve(json);  });  return deferred.promise; }; // 總頁數小于等于7時 顯示所有的頁數 var getPagesLow = function(totalPage) {  var temp = [];  for (var i=1; i<totalPage+1; i++) {   temp.push(i);  }  return temp; }; // 總頁數大于7時 根據當前頁獲取7個頁碼數 var getPagesHigh = function(currentPage, totalPage) {  var temp = [];  if (currentPage < 4) {   temp = [1, 2, 3, 4, 5, '...', totalPage];  } else if ((totalPage - currentPage) <= 3) {   temp = [    totalPage - 6, totalPage - 5, totalPage - 4,    totalPage - 3, totalPage - 2, totalPage - 1, totalPage   ];  } else {   temp = [    currentPage - 2, currentPage - 1, currentPage,    currentPage + 1, currentPage + 2, '...', totalPage   ];  }  return temp; }; // 項目中table的高度是根據瀏覽器窗口的高度計算的來的,是動態的 // 因為要把分頁固定在table最下方,所以無數據的用空行進行代替 var setPageRow = function(rowArr, pageSize) {  var temp = [];  if (rowArr != undefined) {   for (var i = 0; i < rowArr.length; i++) {    temp.push(rowArr[i]);   }   for (var j = 0; j < pageSize - rowArr.length; j++) {    temp.push({});   }  } else {   for (var k = 0; k < pageSize; k++) {    temp.push({});   }  }  return temp; }; return {  load: function(url, currentPage, pageSize) {   var deferred = $q.defer();   url += '&' + currentPage + '&' + pageSize;   return load(url, currentPage, pageSize, deferred);  },  next: function(url, currentPage, pageSize) {   var deferred = $q.defer();   if (currentPage < endPage) {    currentPage++;   }   url += '&' + currentPage + '&' + pageSize;   return load(url, currentPage, pageSize, deferred);  },  prev: function(url, currentPage, pageSize) {   var deferred = $q.defer();   currentPage--;   url += '&' + currentPage + '&' + pageSize;   return load(url, currentPage, pageSize, deferred);  },  loadPage: function(url, currentPage, pageSize, page) {   var deferred = $q.defer();   if (currentPage != page) {    currentPage = page;    url += '&' + currentPage + '&' + pageSize;    return load(url, currentPage, pageSize, deferred);   }  } }}]);

4.使用指令

1).頁面上的代碼:

我的代碼中分頁是寫在table中的tfoot里面了,prev()、next()、loadPage(page)均為在頁面對應的controller中定義的方法

<table><thead> <tr>  <th>序號</th>  <th>列名1</th>  <th>列名2</th>  <th style="width: 150px;text-align: center;">操作</th> </tr></thead><tbody> <tr ng-if="!noTableData" ng-repeat="row in pageData.rowCollectionPage">  <td>{{!!row.id ? $index+1+(pageData.currentPage-1)*pageSize : ''}}</td>  <td>{{row.args1}}</td>  <td>{{row.args2}}</td>  <td style="text-align: center;"><a href='#'>修改</a></td> </tr> <tr ng-if="noTableData" ng-repeat="data in pageData.rowCollectionPage">  <td ng-if="$index == 0" colspan="4" style="text-align: center;">沒有數據!</td>  <td ng-if="$index != 0" colspan="4"></td> </tr> </tbody><tfoot> <tr>  <td style="text-align: center;" colspan="6">   <div>    <page-init page-data="pageData" prev="prev()" next="next()" load-page="loadPage(page)"></page-init>   </div>  </td> </tr></tfoot></table>

2).controller中的代碼

首先要引用factory,將PageSync在controller中引用,如下:

angular.module('app').controller('MyCtrl', function(PageSync) {});

在分頁查詢之前要做一些準備工作:

//pageData中設置分頁數據集合、總頁數、頁碼集合、數據總數,loadTime為自定義的參數,用來記錄時間狀態(訪問數據前及返回數據后)
$scope.pageData = {rowCollectionPage: [], totalPage: 1, currentPage:1, pages: [],count: 0, loadTime: 'before'};
// 這里用來計算table的高度,根據實際情況來。
$scope.tabHeight = $scope.height-48-37-10-42-5;
// 計算實際中一頁有多少行數據
$scope.pageSize = parseInt(($scope.tabHeight-15-34-34-39)/34);

然后再controller中寫如下的方法

// 分頁查詢$scope.load = function(row) { $scope.surgeonPageData.rowCollectionPage = Common.setPageRow([],$scope.pageSize); $scope.noSurgeonData = false; $scope.surgeonPageData.loadTime = 'before'; PageSync.load(url, $scope.pageData.currentPage, $scope.pageSize).then(function(data) {  $scope.pageData = data;  if(($scope.pageData.loadTime=='after'&& $scope.pageData.count==0) || $scope.pageData.loadTime=='before') {   $scope.noTableData = true;  } });};// 下一頁$scope.next = function() { if ($scope.pageData.currentPage < $scope.pageData.totalPage) {  PageSync.next(url, $scope.pageData.currentPage, $scope.pageSize).then(function(data) {   $scope.pageData = data;  }); }};// 上一頁$scope.prev = function() { if ($scope.pageData.currentPage > 1) {  PageSync.prev(url, $scope.pageData.currentPage, $scope.pageSize).then(function (data) {   $scope.pageData = data;  }); }};// 點擊頁碼跳轉$scope.loadPage = function(page) { $scope.inpage = undefined; var intPage; if (typeof page == 'string') {  if(page!="") {   intPage = parseInt(page, 10);  } else {   intPage = 0;  } } else {  intPage = page; } if ($scope.pageData.totalPage <= 1) { } else if (intPage == undefined || intPage == null) {  alert('請填寫跳轉頁碼!'); } else if(intPage <= 0 || intPage > $scope.pageData.totalPage) {  alert('跳轉頁碼應大于0,小于總頁數'+$scope.pageData.totalPage); } else if ($scope.pageData.currentPage != page) {  PageSync.loadPage(url, $scope.pageData.currentPage, $scope.pageSize, page).then(function (data) {   $scope.pageData = data;  }); }};

5.結果
最終的實現效果如下圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人网在线免费看| 国产97在线播放| 国产精品第一第二| 中文字幕精品久久| 欧美性猛交xxxx乱大交3| 亚洲国产精品久久久久| 性亚洲最疯狂xxxx高清| 国产亚洲激情视频在线| 国产精品一区二区三区久久| 免费97视频在线精品国自产拍| 精品国产鲁一鲁一区二区张丽| 国模精品一区二区三区色天香| 91成人在线播放| 亚洲一区二区福利| 福利一区福利二区微拍刺激| 日韩欧美精品免费在线| 欧美日韩成人精品| 午夜精品一区二区三区视频免费看| 亚洲成人久久一区| 欧美视频国产精品| 欧美日本中文字幕| 亚洲一区二区三区乱码aⅴ| 亚洲欧美日韩精品久久亚洲区| 久久天天躁狠狠躁夜夜av| 欧美精品久久久久久久| 久久手机精品视频| 国产精品美女在线观看| 亚洲欧美日韩第一区| 国产免费观看久久黄| 欧美日韩亚洲视频一区| 国产精品久久久一区| 欧美成年人视频网站| 成人看片人aa| 欧美激情区在线播放| 日韩成人中文字幕| 成人信息集中地欧美| 国内精品一区二区三区| 久久久久久尹人网香蕉| 亚洲一区二区中文| 国产美女久久久| 国产亚洲美女久久| 国产日韩精品一区二区| 日韩在线观看视频免费| 久久噜噜噜精品国产亚洲综合| 欧美一级视频免费在线观看| 国产欧美日韩视频| 成人精品一区二区三区| 欧美亚洲一级片| 成人a在线视频| 免费91麻豆精品国产自产在线观看| 国产精自产拍久久久久久蜜| 日韩视频欧美视频| 欧美精品精品精品精品免费| 欧美一级免费看| 国产日本欧美一区二区三区| 亚洲欧洲黄色网| 亚洲一区免费网站| 亚洲精品免费av| 日韩成人在线电影网| 亚洲影院污污.| 亚洲夜晚福利在线观看| 欧美一级片一区| 91伊人影院在线播放| 亚洲欧美三级在线| 日韩成人性视频| 国产一区玩具在线观看| 亚洲激情第一页| 91影院在线免费观看视频| 亚洲精品国产拍免费91在线| 一本色道久久88综合日韩精品| 夜夜嗨av一区二区三区四区| 中文字幕欧美专区| 中文字幕av一区中文字幕天堂| 亚洲高清在线观看| 国产欧美一区二区三区四区| 成人激情免费在线| 992tv在线成人免费观看| 成人福利在线观看| 欧美激情免费在线| 亚洲欧洲在线观看| 亚洲午夜小视频| 久久综合电影一区| 亚洲精品网址在线观看| 国产精品福利无圣光在线一区| 国产福利视频一区二区| 欧美日韩中文在线| 国产在线拍揄自揄视频不卡99| 精品久久在线播放| www.美女亚洲精品| 欧美多人乱p欧美4p久久| 久久久av免费| 一区二区三区美女xx视频| 日韩在线观看免费| 国产精品久久久精品| 欧美激情日韩图片| 国产精品一区二区三区久久久| 欧美精品电影免费在线观看| 92版电视剧仙鹤神针在线观看| 91中文精品字幕在线视频| 日韩不卡中文字幕| 日韩欧美国产骚| 欧美电影免费看| 欧美日韩视频免费播放| 一本久久综合亚洲鲁鲁| 亚洲伊人久久大香线蕉av| 亚洲欧美制服第一页| 亚洲一区二区久久| 国产精品欧美一区二区| 欧美激情一区二区三级高清视频| 在线视频一区二区| 国产日韩精品在线播放| 97国产一区二区精品久久呦| 91av免费观看91av精品在线| 国产精品91久久久久久| 久久影视电视剧免费网站清宫辞电视| 亚洲天堂成人在线| 亚洲欧洲午夜一线一品| 奇米4444一区二区三区| 7777精品视频| 高清欧美性猛交| 国产高清视频一区三区| 欧美色欧美亚洲高清在线视频| 97视频在线观看播放| 久久国产加勒比精品无码| 国产精品欧美日韩一区二区| 国产美女久久精品香蕉69| 91精品啪aⅴ在线观看国产| 欧美一级黑人aaaaaaa做受| 另类少妇人与禽zozz0性伦| 欧美性猛交xxxx乱大交| 91久久精品视频| 欧美福利视频在线| 91精品国产综合久久香蕉的用户体验| 日韩精品中文字幕久久臀| 久久天天躁日日躁| 国产精品网站视频| 91精品国产高清久久久久久91| 欧美黑人又粗大| 欧美麻豆久久久久久中文| 国产成人精彩在线视频九色| 亚洲第一页在线| 亚洲成年网站在线观看| 色樱桃影院亚洲精品影院| 亚洲深夜福利网站| 久久av中文字幕| 国产suv精品一区二区| 欧美男插女视频| 中文字幕精品影院| www.欧美三级电影.com| 成人av.网址在线网站| 欧美激情视频在线| 国产精品福利在线观看| 久久人91精品久久久久久不卡| 国产精品一区二区三区毛片淫片| 欧美另类在线观看| 亚洲www永久成人夜色| 91久久精品日日躁夜夜躁国产| 日韩av一区二区在线| 伊人伊成久久人综合网小说| 日韩最新中文字幕电影免费看| 亚洲综合日韩中文字幕v在线| 亚洲午夜久久久影院| 欧美一级电影在线| 久久亚洲精品一区二区|