利用VUE框架,实现列表分页功能

 原创作品转载请注明出处 

先来看一下效果图:


功能描述:
 1. 点击页面序号跳转到相应页面;
 2. 点击单左/单右,向后/向前跳转一个页面;
 3. 点击双左/双右,直接跳转到最后一页/第一页;
 3. 一次显示当前页面的前三个与后三个页面;
 4. 始终显示最后一个页面;

HTML:
  <!-- 分页开始 -->
<div class="u-pages" style="margin-bottom:20px; margin-top:10px;">
 <ul>
     <li v-if="showPre" class="crt"><a v-on:click="jumpFirst(cur)"> &lt;&lt; </a></li>
     <li v-if="showPre" class="crt"><a v-on:click="minus(cur)"> &lt; </a></li>

     <template v-for="index in indexs" >
         <li class="{{classRenderer(index)}}">
             <a v-on:click="btnClick(index)" >{{index}}</a>
         </li>
     </template>

     <li v-if="showMoreTail" class="crt">..</li>
     <li class="{{classRenderer(pageNo)}}"><a @click="btnClick(pageNo)">{{pageNo}}</a></li>
     <li v-if="showTail" class="crt"><a v-on:click="plus(cur)">&gt;</a></li>
     <li v-if="showTail" class="crt"><a v-on:click="jumpTail(cur)">&gt;&gt;</a></li>

 </ul>
</div>
<!-- 分页结束 -->
HTML方法分析:
1、`<li class="{{classRenderer(index)}}">`
classRenderer()方法实现了当点击页面索引是,点击页面获得选中效果
2、`<a v-on:click="btnClick(index)" >{{index}}</a>`
btnClick()方法,实现了点击页面索引,跳转到相应页面
3、`showPre` `showTail`
showPre控制跳转到第一页与跳转到前一页的按钮的显示与消除
showTail控制跳转到最后一页与跳转到后一页的按钮的显示与消除
4、`cur`
记录当前页序号
5、`jumpFirst(cur)` `minus(cur)`  `plus(cur)`  `jumpTail(cur)`
实现按钮跳转功能

JS:
 module.exports = {
        data: function () {
            return {
                cur:1,
                showTail:true,
                showMorePre: false,
                showMoreTail: false,             

            }
        },
        methods:{
        jumpFirst:function(data){
                var $this = this;
                data = 1;
                $this.cur = data;
                if (data == 1 )
                {
                    $this.$set("showPre", false);
                }else
                {
                    $this.$set("showPre", true);
                }
                $this.$am.ajax({
                    url:window.$ApiConf.api_order_detail_list,
                    type:‘GET‘,
                    data:{start: 1},
                    success: function(data){
                        console.log(data);
                        $this.$set("records", data.record.records);
                        $this.$set("start", data.record.query.start);
                        $this.$set("total", data.record.query.total);
                        $this.$set("limit", data.record.query.limit);
                    }
                })
                $this.$set("showTail", true);
                return data;
            },
            minus:function(data){
                var $this = this;
                data--;
                $this.cur = data;
                $this.$set("showTail", true);
                if(data == 1){
                    $this.$set("showPre", false);

                }else{
                    $this.$set("showPre", true);
                }

                $this.$am.ajax({
                    url:window.$ApiConf.api_order_detail_list,
                    type:‘GET‘,
                    data:{start: 1 + $this.limit * (data-1) },
                    success:function(data){
                        console.log(data);
                        $this.$set("records", data.record.records);
                        $this.$set("start", data.record.query.start);
                        $this.$set("total", data.record.query.total);
                        $this.$set("limit", data.record.query.limit);
                    }
                })
                return data;
            },
            plus: function(data){
                var $this = this;
                data++;
                $this.cur = data;
                $this.$set("showPre", true);
                if (data == $this.pageNo)
                {
                    $this.$set("showTail", false);
                }else
                {
                    $this.$set("showTail", true);
                }
                $this.$am.ajax({
                    url:/* 这里写上你自己请求数据的路径 */,
                    type:‘GET‘,
                    data:{start: 1 + $this.limit * (data-1) },
                    success:function(data){
                        console.log(data);
                        $this.$set("records", data.record.records);
                        $this.$set("start", data.record.query.start);
                        $this.$set("total", data.record.query.total);
                        $this.$set("limit", data.record.query.limit);
                    }
                })
                return data;
            },
            classRenderer:function(index){
                var $this = this;
                var cur = $this.cur;
                if(index != cur){
                    return ‘crt‘;
                }
                return ‘‘;
            },
            btnClick:function(data){
                var $this = this;
                if(data == 1){
                    $this.$set("showPre", false);

                }else{
                    $this.$set("showPre", true);
                }
                if (data == $this.pageNo)
                {
                    $this.$set("showTail", false);
                }else
                {
                    $this.$set("showTail", true);
                }
                if (data != $this.cur)
                {
                    $this.cur = data;
                    $this.$am.ajax({
                        url:window.$ApiConf.api_order_detail_list,
                        type:‘GET‘,
                        data:{start: 1 + $this.limit * (data-1) },
                        success:function(data){
                            console.log(data);
                            $this.$set("records", data.record.records);
                            $this.$set("start", data.record.query.start);
                            $this.$set("total", data.record.query.total);
                            $this.$set("limit", data.record.query.limit);
                        }
                    })
                }
            },
            jumpTail:function(data){
                var $this = this;
                data = $this.pageNo;
                $this.cur = data;
                if (data == $this.pageNo)
                {
                    $this.$set("showTail", false);
                }else
                {
                    $this.$set("showTail", true);
                }
                $this.$am.ajax({
                    url:window.$ApiConf.api_order_detail_list,
                    type:‘GET‘,
                    data:{start: 1 + $this.limit * (data-1) },
                    success:function(data){
                        console.log(data);
                        $this.$set("records", data.record.records);
                        $this.$set("start", data.record.query.start);
                        $this.$set("total", data.record.query.total);
                        $this.$set("limit", data.record.query.limit);
                    }
                })
                $this.$set("showPre", true);
                return data;
            },
         computed: {
            //*********************分页开始******************************//
            indexs: function(){
                var $this = this;
                var ar = [];

                if ($this.cur > 3)
                {
                    ar.push($this.cur - 3);
                    ar.push($this.cur - 2);
                    ar.push($this.cur - 1);

                }else
                {
                    for (var i = 1; i < $this.cur; i++)
                    {
                        ar.push(i);
                    }
                }
                if ($this.cur != $this.pageNo)
                {
                    ar.push($this.cur);
                }

                if ( $this.cur < ( $this.pageNo - 3 ) )
                {
                    ar.push($this.cur + 1);
                    ar.push($this.cur + 2);
                    ar.push($this.cur + 3);
                    if ( $this.cur < ( $this.pageNo - 4 ) )
                    {
                        $this.$set("showMoreTail", true);
                    }
                }else
                {
                    $this.$set("showMoreTail", false);
                    for (var i = ($this.cur + 1); i < $this.pageNo; i++)
                    {
                        ar.push(i);
                    }
                }
                return ar;
            }
            //*********************分页结束******************************//
        }
}      
JS功能分析:
```
indexs
```
用于记录一共有多少页面

总结:
	这段代码基本能够实现分页的功能,如果大家有更好的优化方案请一定与我联系,我将对代码进行进一步优化,欢迎批评指正。
时间: 2024-08-01 20:26:30

利用VUE框架,实现列表分页功能的相关文章

利用PHP访问数据库——实现分页功能与多条件查询功能

1.实现分页功能 <body><table width="100%" border="1">  <thead>    <tr>      <th>代号</th>      <th>名称</th>      <th>价格</th>    </tr>  </thead>  <tbody>      <?php 

CRM-展示列表,分页功能

目录 一.admin (创建超级用户) 二.展示列表 三.分页(封装成类) 一.admin (创建超级用户) 1.注册: 1.创建一个超级管理员,使用如下命令: python manage.py createsuperuser 2.输入打算使用的登录名: username:michaelshu 3.输入email: Email address: 4.输入密码,需要输入两次,输入过程中密码不显示: Password: (既要有数字又要有字母) Password (again): 当两次密码都相同的

SpringMVC框架下实现分页功能

1.创建实体类Page.java @Entity public class Page { private int totalRecord;// 表示查询后一共得到多少条结果记录 private int pageSize; // 表示页面一次要显示多少条记录 private int totalPage;// 表示将所有的记录进行分页后,一共有多少页 private int startIndex;// 表示从所有的结果记录中的哪一个编号开始分页查询 private int currentPage;

vue框架开发出现白屏的解决方法汇总

利用vue框架写一个简单的新闻客户端,修改了部分配置重启项目后发现又白屏的情况.特此做个简单的汇总. 1.npm run build打包页面空白 发现页面head中引用的js和css文件是出现了路径错误,这里修改如下: 解决位置:config/index.js文件:把assetsPublicPath: '/'改为assetsPublicPath: './' 2. iOS的Safari下无法打开网页 webpack-dev-server >= 2.8.0 的版本在 iOS Safari 下无法打开

web前端利用vue.js实现品牌列表的添加,删除与筛选功能

实现效果图: 实现功能:web前端利用vue.js实现品牌列表的添加,删除与筛选功能 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> &l

ASP.NET中利用DataGrid的自定义分页功能

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍一下我在项目中用到的分页

DRF框架中分页功能接口

目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPagination PageNumberPagination是页码分页,这个类可以进行全局设置 LimitOffsetPagination按照偏移量来进行分页 两个类都可以实现,在程序的具体设计上会有一部分的差别,但是差别不大. CursorPagination加密分页功能 二.使用PageNumbe

magento 产品列表排序、分页功能

我们以 catalog_category_layered 控制器为例说明 在catalog.xml 找到catalog_category_layered配置段 <catalog_category_layered translate="label"> <label>Catalog Category (Anchor)</label> <reference name="left"> <block type="

理解vue实现原理,实现一个简单的Vue框架

参考: 剖析Vue实现原理 - 如何实现双向绑定mvvm Vue.js源码(1):Hello World的背后 Vue.js官方工程 本文所有代码可以在git上找到. 其实对JS我研究不是太深,用过很多次,但只是实现功能就算了.最近JS实在是太火,从前端到后端,应用越来越广泛,各种框架层出不穷,忍不住也想赶一下潮流. Vue是近年出的一个前端构建数据驱动的web界面的库,主要的特色是响应式的数据绑定,区别于以往的命令式用法.也就是在var a=1;的过程中,拦截'='的过程,从而实现更新数据,w