在项目中,许多页面被分页,并且每个页面都有许多重复的分页代码。所以,我写了一个简单的分页指令简化页面的代码,便于维护。它是在博客里写的备份,方便以后参考。

下面是定义指令及其应用程序的步骤:

1。指令定义

定义一个js文件,page-directive.js,这是用来写的分页指令代码。该文件包含分页模板,这是在JS文件中的所有代码。




严格使用;
(函数(){())
Angular.module('template / / pageinit pageinit .html,运行({ { })。
templatecache美元,功能($ templatecache){
templatecache.put美元('template / / pageinit pageinit HTML,
' +
' +
' +
' +
' +
' +
' +
' +
翻页}+
翻页}+
' +
' +
' +
' +
' +
' +
' +
共同的{ { } }杆数实现数据。+
' +
'
);
}
});
Angular.module('pageinit,{ 'template / / pageinit pageinit .html})
。指令('pageinit,{ 'pageinittemplate功能(pageinittemplate){)
返回{
限制:'ae,
TemplateUrl:功能(电信、tattrs){
返回tattrs.templateurl(pageinittemplate。方法:获取文件名路径)| |;
},
替换:真的,
经营范围:{
PageData:=,
沪指:,
下一个:' ',
LoadPage:'
},
链接:功能(范围、元素、属性){
scope.on_prev =函数(){
如果(范围。沪指){
Scope.prev();
}
};
scope.on_next =函数(){
如果(范围。下一步){
Scope.next();
}
};
scope.on_loadpage =功能(页){
scope.inpage =定义;
如果(范围。loadpage){
Scope.loadPage({页面:页面});
}
};
}
};
} })
。供应商('pageinittemplate,函数(){(){
var templatePath = 'template / / pageinit pageinit HTML;
this.setpath =功能(路径){
templatePath =路径;
};

这个,$ =函数(){
返回{
GetPath:函数(){
返回templatePath;
}
};
};
});
}呼叫(窗口);




2。分页样式的控制

建议写在一个单独的CSS文件,首先创建一个新的pagesync.css文件,以下是具体的风格




{分页主要。
显示:内联块;
左填充:0;
保证金:00;
边界半径:4px;
垂直对齐:中间;
}
主要li.prev-page { >一个分页。
边界:0;
}
主要li.next-page { >一个分页。
边界:0;
左:1px边境;
左缘:0;
}
主要li.first-page { >一个分页。
左上边框半径:0;
左下边框半径:0;
}
主要li.last-page { >一个分页。
边框右上角半径:0;
边框右下角半径:0;
}
主要的div {分页里。
宽80px;边框1px solid # dddddd;背景颜色:# ffffff;浮动:左;填充:0;
}
主要li.skip-page。分页{输入{类型=中}
宽度:24px;高度:20px;边界:0;文本对齐:中心;
}
主要li.skip-page。分页{输入{类型=按钮}
填充物:0 4px 1px 10px;边界:0;左边框:1px solid # dddddd;背景颜色:# ffffff
}
主要li.data-num { >一个分页。
边界:0;
左缘:0;
}
>李{分页主要。
显示:内联;
}
.pagination-main > li:first-child > A,
李:。分页主要>第一个孩子>跨{ {
左:0;
边框左上4px半径;
左下:* 4px边界半径;
}
。分页主要>。主动>一,
。分页主要>。主动>跨度,
主要活动> >。分页:悬停,
主要活动> >。分页。跨度:悬停,
主要活动> >。分页:焦点,
主要活动> >。分页。跨度:焦点{ {
Z指数:2;
颜色:# FFF;
游标:默认值;
背景颜色:# 428bca;
边框颜色:# 428bca;
}
>李>一个分页的主,
>李>。分页主跨{ {
职位:相对;
浮点数:左;
/ *填充:6px * 12px;
填料:1px 8px;
margin-left: - 1px;
线高度:1.42857143;
颜色:# 428bca;
文字装饰:无;
背景颜色:# FFF;
边境:1px solid # DDD;
}
。分页主要>。残疾人>跨度,
。分页主要>。残疾人>跨度:悬停,
。分页主要>。残疾人>跨度:焦点,
。分页主要>。残疾人>一,
。分页主要>。残疾人>:悬停,
。分页主要>。残疾人>一:焦点{ {
颜色:# 999;
游标:不允许;
背景颜色:# FFF;
边框颜色:# DDD;
}




三.分页查询方法

在工厂中定制分页查询的方法,通用性强,便于代码维护,默认情况下,与背景的交互是异步的。我写的同步查询在这里,我首先定义js文件pagesync.service.js,以下是工厂的全部内容。




严格使用;
Angular.module('app)。厂('pagesync,{$ http ',' $ Q,功能页面($ HTTP,$ Q){
无功rowcollectionpage = { };
无功totalpage = 1;
var页{ };
VaR的末页= 1;
无功负荷=功能(URL,currentpage,PageSize,递延){
var json = { rowcollectionpage:{ },totalpage:1,currentpage:currentpage currentpage:1页:{ } };
http.get美元(URL),成功(功能(行){)
rowcollectionpage = setpagerow(rows.list,PageSize);
获取页面的总页数
totalpage = math.ceil(rows.count / PageSize);
totalpage末页=;
生成数字链路
如果(totalpage <= 7){
页= getpageslow(totalpage);
{人}
页= getpageshigh(currentpage,totalpage);
}
json.rowcollectionpage = rowcollectionpage;
json.totalpage = totalpage = = 0 1:totalpage;
json.currentpage = currentpage;
json.pages =页;
json.count = rows.count;
json.pagesize = PageSize;

*自定义字段,在前面初始化,只要通过分页方法,字段值就会更改为
*表示未传递分页方法,并表示分页方法,
*通过前台页面加载的规则:没有在表格中的数据之前,并没有数据后,patadata。数= = 0,否则视为数据。
*也可以说是记录的时间状态(在访问数据之前和之后)。
* /
json.loadtime = ' ';
deferred.resolve(JSON);
});
返回deferred.promise;
};
显示所有页面总数小于或等于7
无功getpageslow =功能(totalpage){
var;
对于(var i = 1;i < totalpage + 1;i++){
Temp.push(我);
}
回复;
};
根据当前页面,页面总数大于7,以获取页码7。
无功getpageshigh =功能(currentpage,totalpage){
var;
如果(currentpage<4){
温度= { 1, 2, 3,4, 5,'…',totalpage };
}(如果其他(totalpage - currentpage)<= 3){
温度= {
totalpage - 6 - 5 - 4 totalpage,totalpage,
totalpage - 3 - 2 - 1 totalpage,totalpage,totalpage
};
{人}
温度= {
currentpage - 2,currentpage - 1,currentpage,
currentpage + 1,currentpage + 2,'…',totalpage
};
}
回复;
};
表是根据浏览器窗口高度计算的项目高度,是动态的。
由于要固定在表页的底部,所以没有数据被空白行替换。
无功setpagerow =功能(rowarr,PageSize){
var;
如果(rowarr!=未定义的){
对于(var i = 0;i < rowarr.length;i++){
Temp.push(rowarr {我});
}
对于(var j = 0;J < PageSize - rowarr.length;j++){
Temp.push({ });
}
{人}
对于(var k = 0;K<PageSize;K+){
Temp.push({ });
}
}
回复;
};
返回{
负载:功能(URL,currentpage,PageSize){
VaR q.defer美元递延=();
url = currentpage +为++;
回载(URL,currentpage,PageSize,延期);
},
下一步:功能(URL,currentpage,PageSize){
VaR q.defer美元递延=();
如果(currentpage <末页){
currentpage + +;
}
url = currentpage +为++;
回载(URL,currentpage,PageSize,延期);
},
沪指:功能(URL,currentpage,PageSize){
VaR q.defer美元递延=();
currentpage --;
url = currentpage +为++;
回载(URL,currentpage,PageSize,延期);
},
LoadPage:功能(URL,currentpage,大小页){
VaR q.defer美元递延=();
如果(currentpage!=页){
currentpage =页;
url = currentpage +为++;
回载(URL,currentpage,PageSize,延期);
}
}
}
});




4。使用指令

1)。页面上的代码:

在我的代码写的分页表很大,与沪指()、下(),和loadpage(页面)页面控制器中定义的方法。







序列号
栏目名称1
栏目名称2
操作




转折!!row.id美元指数+ 1 +(PageData。currentpage-1)*为:} }
{ {行。args1 } }
{ {行。args2 } }
修改


没有数据!

















2)控制器中的代码

首先,本厂是引用PageSync引用控制器,如下:

Angular.module('app)。控制器('myctrl功能(pagesync){ });

在分页查询之前做一些准备工作:

/ /实现数据集的分页数据集,总页码,页码的设置和数据的总数。时间是一个自定义的参数,它是用来记录时间的状态(在访问数据和返回的数据)。

scope.pagedata美元= { rowcollectionpage:{ },totalpage:currentpage:1,页数:1,数:0,时间:以前} { };

这里用于计算表的高度,根据实际情况。

scope.tabheight = scope.height-48-37-10-42-5美元美元;

在数据行数中计算实际页面

scope.pagesize美元= parseInt(($范围。tabheight-15-34-34-39) / 34);

然后用控制器编写以下方法




分页查询
scope.load美元=功能(行){
scope.surgeonpagedata.rowcollectionpage美元= common.setpagerow({ },范围为美元。);
scope.nosurgeondata美元= false;
scope.surgeonpagedata.loadtime美元=以前;
PageSync.load(URL,scope.pagedata.currentpage美元,美元范围。PageSize)。然后(功能(数据){)
scope.pagedata美元=数据;
如果(($范围。PageData。时间= =$范围。PageData。数= = 0){ $范围。PageData。时间= =以前| |)
scope.notabledata美元=真;
}
});
};

scope.next美元=函数(){
如果($ scope.pagedata.currentpage <美元范围。实现数据。totalpage){
PageSync.next(URL,scope.pagedata.currentpage美元,美元范围。PageSize)。然后(功能(数据){)
scope.pagedata美元=数据;
});
}
};

scope.prev美元=函数(){
如果($ scope.pagedata.currentpage > 1){
PageSync.prev(URL,scope.pagedata.currentpage美元,美元范围。PageSize)。然后(功能(数据){)
scope.pagedata美元=数据;
});
}
};
单击页面跳转
scope.loadpage美元=功能(页){
scope.inpage美元=定义;
无功intpage;
如果(typeof页= = 'String'){
如果(页)!){
intpage = parseInt(页10);
{人}
intpage = 0;
}
{人}
intpage =页;
}

如果($ scope.pagedata.totalpage <= 1){

如果别人}(intpage = =定义的| | { intpage = = null)
警报(请填写跳转页码!);
} else if(intpage美元范围。实现数据。totalpage){
警报('jump页面数量应该大于0,小于总页面数+ $范围。实现数据。totalpage);
} else if($ scope.pagedata.currentpage!=页){
PageSync.loadPage(URL,scope.pagedata.currentpage美元,美元scope.pagesize,页)。然后(功能(数据){)
scope.pagedata美元=数据;
});
}
};




5。结果

最终实现结果如下:





以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。