Javascript vue.js表格分页,ajax异步加载数据

作者:lqh 时间:2024-05-21 10:13:05 

分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理。

效果:

Javascript vue.js表格分页,ajax异步加载数据

代码:

1.注册一个组件

js


Vue.component('pagination',{
   template:'#paginationTpl',
   replace:true,
   props:['cur','all','pageNum'],
   methods:{
     //页码点击事件
     btnClick: function(index){
       if(index != this.cur){
         this.cur = index;
       }
     }
   },
   watch:{
     "cur" : function(val,oldVal) {
       this.$dispatch('page-to', val);
     }
   },
   computed:{
     indexes : function(){
       var list = [];
       //计算左右页码
       var mid = parseInt(this.pageNum / 2);//中间值
       var left = Math.max(this.cur - mid,1);
       var right = Math.max(this.cur + this.pageNum - mid -1,this.pageNum);
       if (right > this.all ) { right = this.all}
       while (left <= right){
         list.push(left);
         left ++;
       }
       return list;
     },
     showLast: function(){
       return this.cur != this.all;
     },
     showFirst: function(){
       return this.cur != 1;
     }
   }
 });

模板:


<script type="text/template" id="paginationTpl">
 <nav v-if="all > 1">
   <ul class="pagination">
     <li v-if="showFirst"><a href="javascript:" @click="cur--">&laquo;</a></li>
     <li v-for="index in indexes" :class="{ 'active': cur == index}">
       <a @click="btnClick(index)" href="javascript:">{{ index }}</a>
     </li>
     <li v-if="showLast"><a @click="cur++" href="javascript:">&raquo;</a></li>
     <li><a>共<i>{{all}}</i>页</a></li>
   </ul>
 </nav>
</script>

HTML:


<div id='item_list'>
 ...
 <pagination :cur="1" :all="pageAll" :page-num="10" @page-to="loadList"></pagination>
</div>

当点击分页链接的时候,通过watch cur,子组件分发 page-to 事件,通过 @page-to="loadList" 标签指定使用父组件 loadList 方法处理事件,父组件接收到page值然后ajax加载数据,根据服务端返回计算并更新自身的 pageAll 值,因为子组件prop通过 :all="pageAll" 动态绑定了父组件的pageAll对象,所以子组件会联动更新。

附上一个简单的表格组件例子:


var vm = new Vue({
   el: "#item_list",
   data: {
     items : [],
     //分页参数
     pageAll:0, //总页数,根据服务端返回total值计算
     perPage:10 //每页数量
   },
   methods: {
     loadList:function(page){
       var that = this;
       $.ajax({
         url : "/getList",
         type:"post",
         data:{"page":page,"perPage":this.perPage},
         dataType:"json",
         error:function(){alert('请求列表失败')},
         success:function(res){
           if (res.status == 1) {
             that.items = res.data.list;
             that.perPage = res.data.perPage;
             that.pageAll = Math.ceil(res.data.total / that.perPage);//计算总页数
           }
         }
       });
     },
     //初始化
     init:function(){
       this.loadList(1);
     }
   }
 });
 vm.init();

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

标签:Javascript,vue.js,异步加载数据
0
投稿

猜你喜欢

  • jquery实现不同大小浏览器使用不同的css样式表的方法

    2024-04-10 10:34:53
  • Sql Server中的非聚集索引详细介

    2024-01-26 15:57:56
  • PHP simplexml_load_file()函数讲解

    2023-06-03 23:16:56
  • asp使用XMLHTTP下载远程数据输出到浏览器

    2007-11-04 10:34:00
  • ubuntu kylin 14.10下多个mysql 5.7.14安装教程

    2024-01-24 12:50:13
  • 在asp里通过以下两个函数实现javascript里的escape函数和unescape函数功能

    2010-03-14 11:30:00
  • 解决安装python库时windows error5 报错的问题

    2022-06-14 05:26:04
  • Django如何继承AbstractUser扩展字段

    2023-08-24 06:19:27
  • 深入了解Python iter() 方法的用法

    2023-11-05 02:12:37
  • Pytest单元测试框架生成HTML测试报告及优化的步骤

    2021-07-10 16:49:13
  • SQL Server 2000 清理日志精品图文教程

    2024-01-18 17:16:55
  • python用什么编辑器进行项目开发

    2021-04-17 19:25:20
  • ASP生成静态网页的方法

    2008-02-18 19:20:00
  • python题解LeetCode303区域和检索示例详解

    2022-12-13 16:10:11
  • vue中watch的实际开发学习笔记

    2024-04-30 10:41:15
  • Python调整数组形状如何实现

    2021-01-06 09:55:34
  • python切片中内存的注意事项总结

    2022-12-23 00:04:09
  • MySQL新手入门指南--快速参考

    2024-01-21 09:58:14
  • php 查找数组元素提高效率的方法详解

    2023-11-15 02:51:08
  • JavaScript实现相册弹窗功能(zepto.js)

    2024-04-19 10:42:49
  • asp之家 网络编程 m.aspxhome.com