我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue使用v-model封装el-pagination组件的详细步骤

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue使用v-model封装el-pagination组件的详细步骤

这篇文章主要介绍“Vue使用v-model封装el-pagination组件的详细步骤”,在日常操作中,相信很多人在Vue使用v-model封装el-pagination组件的详细步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue使用v-model封装el-pagination组件的详细步骤”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

使用v-model绑定分页信息对象,分页信息对象包括3个核心属性参数,分页事件直接绑定查询数据的方法,消除父组件的handleSizeChange和handleCurrentChange的绑定事件方法。

1、前言

  通过封装el-pagination组件开发自定义分页组件的类似文章网上已经有很多了,但看了一圈,总是不如意,于是决定还是自己动手搞一个。

2、背景

2.1、常规分页处理方法

  利用el-pagination组件的常规做法如下:

  模板部分:

 <el-pagination @size-change="handleSizeChange"            @current-change="handleCurrentChange" :current-page="pageInfo.pagenum"            :page-sizes="[5, 10, 15, 20]" :page-size="pageInfo.pagesize"            layout="total, sizes, prev, pager, next, jumper" :total="pageInfo.total"            background>        </el-pagination>

  脚本部分:

export default {  data() {    return {      formData : {        //查询信息        queryInfo:{          userType  : 0,          deleteFlag: 2,  //表示所有类型          pagenum   : 1,          pagesize  : 10              },        // 用户类型选择框当前选中显示标签值        userTypeLabel : "所有类型",        // 用户状态选择框当前选中显示标签值        userStatusLabel : "所有类型"      },              // 分页信息      pageInfo:{        pagenum   : 1,        pagesize  : 10,        total     : 0      }    }  },  methods: {    // 查询用户信息列表    queryUsers(){      let _this = this;      //console.log(this.pageInfo);      this.formData.queryInfo.pagenum = this.pageInfo.pagenum;      this.formData.queryInfo.pagesize = this.pageInfo.pagesize;      this.instance.queryUsers(        this.$baseUrl,this.formData.queryInfo      ).then(res => {        //console.log(res.data);        if (res.data.code == this.global.SucessRequstCode){          //如果查询成功          _this.pageInfo.total = res.data.data.length;          _this.userInfoList = res.data.data;        }else{          alert(res.data.message);        }      }).catch(error => {        alert('查询失败!');                    console.log(error);      });    },        // 每页条数改变    handleSizeChange(newSize) {        this.pageInfo.pagesize = newSize;        this.queryUsers();    },    // 当前页码改变    handleCurrentChange(newPage) {        this.pageInfo.pagenum = newPage;        this.queryUsers();    }  }

2.2、问题分析

  每个分页查询,都需要这么来一套,有点简单重复,又略有不同,即查询数据的方法会不同。

  对于有强迫症的程序猿来说,简单重复的代码无疑非常令人不爽。因此,需要将之组件化。

  分析el-pagination分页组件:

  1. 有三个核心属性参数,分别是:当前页码(current-page)、每页条数(page-size)、总记录条数(total)。核心属性参数通过绑定父组件页面数据,实行双向联动。其中当前页码和每页条数一般通过操作分页子组件来改变,总记录条数通过查询数据后由父组件进行设置。

  2. 有两个事件:分别是:@size-change(每页条数改变事件)、@current-change(当前页码改变事件)。这两个事件,分别绑定父组件的对应事件处理方法handleSizeChange和handleCurrentChange,两者均调用查询数据的方法,查询数据的方法中,得到结果集后,设置总记录条数。

  自定义分页组件的开发目标:消除父组件的handleSizeChange和handleCurrentChange的绑定事件方法。

  思路:使用v-model绑定分页信息对象,分页信息对象包括3个核心属性参数,即上述的pageInfo。然后分页事件直接绑定查询数据的方法。

3、方案实施

3.1、自定义分页组件

  编写一个自定义分页组件代码,文件为/class="lazy" data-src/Pagination.vue。代码如下:

<template lang="html">  <div class="pagination">    <el-pagination       @size-change="handleSizeChange"       @current-change="handleCurrentChange"      :current-page.sync="pageInfo.pagenum"        :page-size="pageInfo.pagesize"       :page-sizes="pageSizes"      :total="pageInfo.total"      layout="total, sizes, prev, pager, next, jumper"      background >    </el-pagination>  </div>   </template><script>  export default {    name  : "pagination",    model : {        prop    : 'pageInfo',        event   : 'change'    },    props : {      // 每页条数选择项      pageSizes: {        type: Array,        default() {          return [5, 10, 15, 20];        }      },      // v-model绑定的数据对象      pageInfo: {        type: Object,        reuqired:true      }    },    data(){      return {                  }    },    methods: {      handleSizeChange(newSize) {        var newValue={pagesize : newSize,pagenum : newSize <= this.total  ?  1  :  this.pageInfo['pagenum'] };        this.$emit('change',Object.assign(this.pageInfo,newValue));        this.$emit('pagination');      },      handleCurrentChange(newPage) {        this.$emit('change',Object.assign(this.pageInfo,{pagenum : newPage}));        this.$emit('pagination');      }    }      }</script><style lang="css" scoped>.pagination {    padding: 10px 0;    text-align: center;}</style>

  自定义分页组件,名称为pagination,其使用v-model,实现双向数据通信。当页码或每页条数改变时,触发分页事件@pagination,提供与父组件方法绑定。

  此处约定了pageInfo的字段结构如下:

  pageInfo:{        pagenum   : 1,//Number        pagesize  : 10,//Number        total     : 0//Number      }

  父组件必须提供相同结构的数据对象来绑定组件内部的pageInfo对象。

3.2、注册分页组件

  然后注册此分页组件,在main.js中加入下列代码:

import pagination  from '@/components/Pagination.vue'// 注册分页插件Vue.component('pagination', pagination)

3.3、父组件调用方法

  用pagination组件修改前面第二章的代码。

  模板部分:

  <!-- 分页区域 -->        <pagination v-model="pageInfo" @pagination="queryUsers"></pagination>

  脚本部分:

export default {   data() {    return {      formData : {        //查询信息        queryInfo:{          userType  : 0,          deleteFlag: 2,  //表示所有类型          pagenum   : 1,          pagesize  : 10              },        // 用户类型选择框当前选中显示标签值        userTypeLabel : "所有类型",        // 用户状态选择框当前选中显示标签值        userStatusLabel : "所有类型"      },              // 分页信息      pageInfo:{        pagenum   : 1,        pagesize  : 10,        total     : 0      }    }  },  methods: {    // 查询用户信息列表    queryUsers(){      let _this = this;      //console.log(this.pageInfo);      this.formData.queryInfo.pagenum = this.pageInfo.pagenum;      this.formData.queryInfo.pagesize = this.pageInfo.pagesize;      this.instance.queryUsers(        this.$baseUrl,this.formData.queryInfo      ).then(res => {        //console.log(res.data);        if (res.data.code == this.global.SucessRequstCode){          //如果查询成功          _this.pageInfo.total = res.data.data.length;          _this.userInfoList = res.data.data;        }else{          alert(res.data.message);        }      }).catch(error => {        alert('查询失败!');                    console.log(error);      });    }  }

  这样,就去掉了handleSizeChange和handleCurrentChange事件响应方法了。分页信息发生改变时,触发绑定的queryUsers方法。

  另外,如需调整pageSizes,则在模板处类似如下设置:

:pageSizes=[10,20,30,50,100]

4、参考文章

  此组件开发主要参考了下列文章:

Vue+el-pagination二次封装,https://blog.csdn.net/weixin_47259997/article/details/107887823。

vue项目 使用elementui中的el-pagination封装公用分页组件,https://www.jianshu.com/p/e241e5710fb0/。

到此,关于“Vue使用v-model封装el-pagination组件的详细步骤”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue使用v-model封装el-pagination组件的详细步骤

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue使用v-model封装el-pagination组件的详细步骤

这篇文章主要介绍“Vue使用v-model封装el-pagination组件的详细步骤”,在日常操作中,相信很多人在Vue使用v-model封装el-pagination组件的详细步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
2023-06-20

Vue封装通用table组件的详细步骤

本篇内容介绍了“Vue封装通用table组件的详细步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言为什么需要封装table组件?第
2023-06-20

Vue+ElementUI 封装简易PaginationSelect组件的详细步骤

这篇文章主要介绍了Vue+ElementUI 封装简易PaginationSelect组件,这里简单介绍封装的一个Pagination-Select组件几个步骤,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
2022-11-13

Ant Design Vue Pagination分页组件的封装与使用

这篇文章主要介绍了Ant Design Vue Pagination分页组件的封装与使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-17

C++封装静态链接库和使用的详细步骤

这篇文章主要介绍了C++封装静态链接库和使用,本文描述了怎么去把一个C++程序封装成一个静态库并且如何去使用这些静态库,需要的朋友可以参考下
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录