將angular-ui的分頁(yè)組件封裝成指令的方法詳解
準(zhǔn)備工作:
(1)一如既往的我還是使用了requireJS進(jìn)行js代碼的編譯
(2)必須引入angualrJS , ui-bootstrap-tpls-1.3.2.js , bootstrap.css....
首先拋出幾個(gè)問(wèn)題:
a):何時(shí)回用到分頁(yè) (當(dāng)后端返回的數(shù)據(jù)過(guò)多,一頁(yè)裝不滿時(shí),我們必須要采取分頁(yè)的效果,給用戶良好的視覺(jué)效果)
b):分頁(yè)一般要傳遞哪些數(shù)據(jù) (總的數(shù)據(jù)數(shù)量,每頁(yè)固定顯示多少條數(shù)據(jù),當(dāng)點(diǎn)擊分頁(yè)時(shí)候返回當(dāng)前的頁(yè)碼.......這三條是必須的)
第一步:先完成指令的封裝
我會(huì)在 js/directives/pagedir 此文件下完成指令的編寫(xiě)
pagedir.html(指令頁(yè)面模板)
<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" 分頁(yè)函數(shù)="" ng-change="pageChanged()" 是否將當(dāng)前頁(yè)顯示在中間="" rotate="true" 是否顯示首頁(yè),和末頁(yè)的數(shù)字="" boundary-link-numbers="true" 是否顯示“.....”這幾個(gè)點(diǎn)="" force-ellipses="true" 顯示頁(yè)碼的頁(yè)碼tabs數(shù)量(不包含首頁(yè),末頁(yè))="" max-size="maxSize" 當(dāng)前頁(yè)="" ng-model="bigCurrentPage" 每頁(yè)顯示的數(shù)據(jù)條數(shù)="" ="" items-per-page="pageSize" 總的數(shù)據(jù)記錄數(shù)="" 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",//指令的模板頁(yè)面
restrict:'AE',
scope:{
data:'=', //用于獲取頁(yè)面控制器傳回來(lái)的數(shù)據(jù)(例如:總得記錄數(shù),每頁(yè)顯示的數(shù)量等....)
currentpage:'=', //返回當(dāng)前頁(yè)給頁(yè)面控制器
},
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) {//用于設(shè)置回到指定頁(yè)
$scope.bigCurrentPage = pageNo;
console.log( $scope.bigCurrentPage);
};
$scope.pageChanged = function() {//用于返回當(dāng)前頁(yè)
$log.log('Page changed to: ' + $scope.bigCurrentPage);
console.log($scope.bigCurrentPage);
$scope.currentpage=$scope.bigCurrentPage;//賦值,準(zhǔn)備傳給頁(yè)面控制器,用于接口的取值
};
}],
}
}]);
});
第二步:明確使用地方
我打算在test.html頁(yè)面上使用分頁(yè)的功能(你可以在各個(gè)有多條數(shù)據(jù)現(xiàn)實(shí)的頁(yè)面使用分頁(yè))
test.html
<p>this is page dir</p> <pagedir ng-click="getCurPage()" currentpage="currentpage" data="dataPage"> </pagedir>
對(duì)應(yīng)的控制器:idea_test_ctrl
define(['app','directives/pagedir/pagedir'],function(myapp){
myapp.controller("idea_test_ctrl",['$scope',function($scope){
$scope.dataPage={ //用于分頁(yè)的數(shù)據(jù)
maxSize:5, //顯示五個(gè)頁(yè)碼按鈕(不包括第一條,和最后一條)
bigTotalItems:50, //總的記錄數(shù)(一般來(lái)源于接口的返回?cái)?shù)據(jù))
bigCurrentPage:1, //當(dāng)前頁(yè)碼
pageSize:5, //每頁(yè)顯示的數(shù)據(jù)數(shù)量
numPages:50/5, //共有多少頁(yè)
};
$scope.getCurPage=function(){
console.log($scope.currentpage,"========================================");
//接下來(lái)的調(diào)用后臺(tái)接口,返回?cái)?shù)據(jù)
//...........................一系列的后續(xù)操作
}
}]);
});
最終頁(yè)面的顯示效果

順便給出路由的配置
.state('home.ideas.test', {
url: '/test',
views: {
"part": {
templateUrl: 'tpls/ideas/test.html',
controller:"idea_test_ctrl"
}
}
})
總結(jié)一下:封裝此指令的難點(diǎn)(假如你已經(jīng)了解怎么使用angualr的指令了)
1>:如何雙向傳值的問(wèn)題(在頁(yè)面控制器設(shè)置的數(shù)值傳遞到分頁(yè)模塊控制器,以及每次點(diǎn)擊分頁(yè)怎么樣將頁(yè)碼傳回頁(yè)面控制器用于調(diào)用接口的傳參)
一點(diǎn)分享:link鏈接方法與指令的controller有啥關(guān)系(貌似都可以進(jìn)行數(shù)據(jù)的操作) 指令的控制器和link函數(shù)可以進(jìn)行互換。控制器主要是用來(lái)提供可在指令間復(fù)用的行為,但鏈接函數(shù)只能在當(dāng)前內(nèi)部指令中定義行為,且無(wú)法在指令間復(fù)用.link函數(shù)可以將指令互相隔離開(kāi)來(lái),而controller則定義可復(fù)用的行為。 (指令是可以嵌套的,還記得我們指令中有一個(gè)require的屬性嗎?)
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
舉例簡(jiǎn)介AngularJS的內(nèi)部語(yǔ)言環(huán)境
這篇文章主要介紹了AngularJS的內(nèi)部語(yǔ)言環(huán)境,展示不同語(yǔ)言環(huán)境下對(duì)貨幣或是日期等文本方面所產(chǎn)生的影響,需要的朋友可以參考下2015-06-06
Angular2中監(jiān)聽(tīng)數(shù)據(jù)更新的方法
今天小編就為大家分享一篇Angular2中監(jiān)聽(tīng)數(shù)據(jù)更新的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Angular項(xiàng)目中$scope.$apply()方法的使用詳解
這篇文章主要給大家介紹了關(guān)于Angular項(xiàng)目中$scope.$apply()方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Angularjs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)看看吧。2017-07-07
angular4 如何在全局設(shè)置路由跳轉(zhuǎn)動(dòng)畫(huà)的方法
本篇文章主要介紹了angular4 如何在全局設(shè)置路由跳轉(zhuǎn)動(dòng)畫(huà)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
angular 服務(wù)的單例模式(依賴(lài)注入模式下)詳解
這篇文章主要介紹了angular 服務(wù)的單例模式(依賴(lài)注入模式下)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
AngularJS 入門(mén)教程之HTML DOM實(shí)例詳解
本文主要介紹AngularJS HTML DOM,這里幫大家整理了詳細(xì)的資料,并附實(shí)例代碼詳細(xì)講解,有需要的小伙伴可以參考下2016-07-07
AngularJs Injecting Services Into Controllers詳解
本文主要介紹AngularJs Injecting Services Into Controllers的知識(shí),這里整理了一下相關(guān)資料,及示例代碼,幫助大家學(xué)習(xí)和理解,有興趣的小伙伴可以參考下2016-09-09

