首页 > 语言 > JavaScript > 正文

Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能

2024-05-06 15:22:18
字体:
来源:转载
供稿:网友

2017年底了,总结了这一年多来的前端之路,Vue从入门到放弃,再二进宫,从 Vue1.0 持续跟踪到 Vue2.5。结合公司的一些实际项目,也封装了一些比较实用的组件。

由于现在公司管理平台主要运用Element UI,索性就结合组件Table 和 Pagination 封装了一个支持页面切换的Table组件,不啰嗦,直接上代码。

2、实现思路

2.1、Element UI 引入(整体引入)

main.js

// Element UIimport Element from 'element-ui'// 默认样式import 'element-ui/lib/theme-chalk/index.css'

2.2、开始封装 iTable.vue 组件 (骨架)

由于公司项目都是以 i 开头,所以,为了区分组件和页面,习惯于组件命名也以 i 开头。 首先把 Table 、 Pagination 组件加进来

<template> <div class="table">  <!--region 表格-->  <el-table id="iTable"></el-table>  <!--endregion-->  <!--region 分页-->  <el-pagination></el-pagination>  <!--endregion--> </div><template>

养成写注释的好习惯,个人项目的注释量基本上不会低于 30%

2.3、在页面中引用 iTable 组件,并且给 iTable 组件传值

<template> <div class="table-page"> <i-table :list="list"     :total="total"     :otherHeight="otherHeight"    @handleSizeChange="handleSizeChange"    @handleIndexChange="handleIndexChange" @handleSelectionChange="handleSelectionChange"    :options="options"    :columns="columns"    :operates="operates"    @handleFilter="handleFilter"    @handelAction="handelAction"> </i-table> </div></template><script> import iTable from '../../components/Table/Index' export default {  components: {iTable},  data () {   return {    total: 0, // table数据总条数    list: [], // table数据    otherHeight: 208, // 除了table表格之外的高度,为了做table表格的高度自适应    page: 1, // 当前页码    limit: 20, // 每页数量    options: {     stripe: true, // 是否为斑马纹 table     loading: false, // 是否添加表格loading加载动画     highlightCurrentRow: true, // 是否支持当前行高亮显示     mutiSelect: true, // 是否支持列表项选中功能     filter: false, // 是否支持数据过滤功能     action: false // 是否支持 表格操作功能    }, // table 的参数    columns: [     {      prop: 'id',      label: '编号',      align: 'center',      width: 60     },     {      prop: 'title',      label: '标题',      align: 'center',      width: 400,      formatter: (row, column, cellValue) => {       return `<span style="white-space: nowrap;color: dodgerblue;">${row.title}</span>`      }     },     {      prop: 'state',      label: '状态',      align: 'center',      width: '160',      render: (h, params) => {       return h('el-tag', {       props: {type: params.row.state === 0 ? 'success' : params.row.state === 1 ? 'info' : 'danger'} // 组件的props       }, params.row.state === 0 ? '上架' : params.row.state === 1 ? '下架' : '审核中')      }     },     ……    ], // 需要展示的列    operates: {     width: 200,     fixed: 'right',     list: [      {       label: '编辑',       type: 'warning',       show: true,       icon: 'el-icon-edit',       plain: true,       disabled: true,       method: (index, row) => {        this.handleEdit(index, row)       }      },      {       label: '删除',       type: 'danger',       icon: 'el-icon-delete',       show: true,       plain: false,       disabled: false,       method: (index, row) => {        this.handleDel(index, row)       }      }     ]    } // 列操作按钮   }  },  methods: {    // 切换每页显示的数量   handleSizeChange (size) {    this.limit = size    console.log(' this.limit:', this.limit)   },   // 切换页码   handleIndexChange (index) {    this.page = index    console.log(' this.page:', this.page)   },   // 选中行   handleSelectionChange (val) {    console.log('val:', val)   },   // 编辑   handleEdit (index, row) {    console.log(' index:', index)    console.log(' row:', row)   },   // 删除   handleDel (index, row) {    console.log(' index:', index)    console.log(' row:', row)   }  } }</script>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选