博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angular分页指令, 简单配置即可使用
阅读量:5962 次
发布时间:2019-06-19

本文共 7981 字,大约阅读时间需要 26 分钟。

指令html模板

page.html

显示第 {
{(conf.currentPage-1) * conf.pageSize + 1}} 到第 {
{conf.currentPage == conf.totalPage ? conf.total : conf.currentPage * conf.pageSize }} 条记录 , 总共 {
{conf.total}} 条记录
, 每页显示
条记录

指令

app.directive('pagination', ['$http', '$q', function ($http, $q) {            return {                restrict: 'E',                templateUrl: './modules/business/page.html',                replace: true,                scope: {                    list: '=', //列表数据                    url: '@', //接口url                    method: '@', //get or post                    requestParam: '=', //请求参数                    requestData: '=', //请求对象数据                    event: '@' //事件名, 外部调用分页查询的事件                },                link: function (scope, element) {                    //监听事件                    scope.$on(scope.event, function (event, data) {                        console.log(scope.event, data);                        scope.loadData();                    });                        //ajax服务                    var AjaxService = {                        get: function (url, params) {                            var defered = $q.defer();                            $http({                                method: 'GET',                                url: url,                                params: params                            })                                .success(function (data) {                                    defered.resolve(data);                                })                                .error(function (err) {                                    defered.reject(err);                                });                            return defered.promise;                        },                        post: function (url, params, data) {                            var defered = $q.defer();                            $http({                                method: 'POST',                                url: url,                                params: params,                                data: data                            })                                .success(function (data) {                                    defered.resolve(data);                                })                                .error(function (err) {                                    defered.reject(err);                                });                            return defered.promise;                        }                    };                        //配置参数                    scope.conf = {                        currentPage: 1,                        totalPage: 1,                        endPage: 1,                        pageSize: 15,                        pages: [],                        total: 0,                        pageSizeList: [10, 15, 20, 25, 30, 35, 40, 45, 50]                    };                        //加载数据                    scope.loadData = function () {                        scope.requestParam = scope.requestParam instanceof Object && scope.requestParam || {};                        scope.requestData = scope.requestData instanceof Object && scope.requestData || {};                        scope.requestParam.page = scope.conf.currentPage;                        scope.requestParam.pageSize = scope.conf.pageSize;                            var promise = null;                        if (scope.method == 'GET') promise = AjaxService.get(scope.url, scope.requestParam);                        else if (scope.method == 'POST') promise = AjaxService.post(scope.url, scope.requestParam, scope.requestData);                        promise.then(function (resp) {                            if (resp && resp.code == 0) {                                if (resp.result && resp.result instanceof Array) scope.list = resp.result;                                else scope.list = [];                                if (resp.total && typeof(resp.total) == 'number') scope.conf.total = resp.total;                                else scope.conf.total = 0;                            }                            scope.calcPages();                        });                    };                        //改变页大小                    scope.changePageSize = function (n) {                        scope.conf.pageSize = n;                        scope.conf.currentPage = 1;                        scope.loadData();                    };                        //下一页                    scope.next = function () {                        if (scope.conf.currentPage < scope.conf.totalPage) {                            scope.conf.currentPage++;                            scope.loadData();                        }                    };                        //上一页                    scope.prev = function () {                        if (scope.conf.currentPage > 1) {                            scope.conf.currentPage--;                            scope.loadData();                        }                    };                        //加载指定页                    scope.loadPage = function (page) {                        if (scope.conf.currentPage != page) {                            scope.conf.currentPage = page;                            scope.loadData();                        }                    };                        //查询                    scope.query = function () {                        scope.conf.currentPage = 1;                        scope.loadData();                    };                        //计算页数                    scope.calcPages = function () {                        //计算总页数                        scope.conf.totalPage = Math.ceil(scope.conf.total / scope.conf.pageSize);                        //生成快捷页码                        if (scope.conf.currentPage > 1 && scope.conf.currentPage < scope.conf.totalPage) {                            scope.conf.pages = [                                scope.conf.currentPage - 1,                                scope.conf.currentPage,                                scope.conf.currentPage + 1                            ];                        } else if (scope.conf.currentPage == 1 && scope.conf.totalPage > 1) {                            scope.conf.pages = [                                scope.conf.currentPage,                                scope.conf.currentPage + 1                            ];                        } else if (scope.conf.currentPage == scope.conf.totalPage && scope.conf.totalPage > 1) {                            scope.conf.pages = [                                scope.conf.currentPage - 1,                                scope.conf.currentPage                            ];                        }                    };                        //指令加载完后立即查询                    scope.query();                }            };        }]);
为了代码集中一点, 我把ajaxservice定义在了内部. 指令基本包含分页所需功能,且不需修改, 下次就可以直接引用.

应用

index.html

示例代码中, list参数是双向绑定的列表数据, businesses就是页面table绑定的ng-repeat循环的列表集合, url是后台接口, event是事件名, method是接口方法,GET or POST, request-param就是请求参数,request-data就是请求体.

controller.js

//分页请求参数    $scope.requestParam = {};    //分页请求对象(模糊查询时,对象属性可以为列表数据的字段)    $scope.requestData = {};    /**     * 广播通知分页指令     */    $scope.query = function () {        $scope.$broadcast('event-pagination-query-bp', 'query');    };

当新增数据或者更新数据后, 可以调用controller里的query方法, 通知指令进行分页查询

页面效果

图片描述

转载地址:http://hrjax.baihongyu.com/

你可能感兴趣的文章
JavaWeb网上图书商城完整项目--day02-10.提交注册表单功能之页面实现
查看>>
做程序开发的你如果经常用Redis,这些问题肯定会遇到
查看>>
006android初级篇之jni数据类型映射
查看>>
org.openqa.selenium.StaleElementReferenceException
查看>>
HBase 笔记3
查看>>
Linux嵌入式GDB调试环境搭建
查看>>
java分析jvm常用指令
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
阿里百川码力APP监控 来了!
查看>>
使用dotenv管理环境变量
查看>>
温故js系列(11)-BOM
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>
切图崽的自我修养-[ES6] 编程风格规范
查看>>
服务器迁移小记
查看>>
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>