封装Vue Element的table表格组件的示例详解

yizhihongxing

首先介绍一下Vue Element的table表格组件,它是基于Vue.js的易用的表格组件,能够快速方便地创建数据表格,支持分页、排序和多选等功能,并且形象直观地展示数据。

下面我们主要是介绍一下如何进行封装,以便更好地使用。

第一步,建立自己的table组件,将其封装进Vue组件中。

<template>
  <div>
    <el-table :data="data" :height="height" :stripe="stripe" :border="border"
      :fit="fit" :show-header="showHeader" :highlight-current-row="highlightCurrentRow"
      :current-row-key="currentRowKey" :row-class-name="rowClassName"
      @select="handleSelect" @select-all="handleSelectAll">
      <slot></slot>
    </el-table>
  </div>
</template>

<script>
export default {
  name: 'custom-table',
  props: {
    data: Array,
    height: [String, Number],
    stripe: {
      type: Boolean,
      default: true,
    },
    border: {
      type: Boolean,
      default: true,
    },
    fit: {
      type: Boolean,
      default: true,
    },
    showHeader: {
      type: Boolean,
      default: true,
    },
    highlightCurrentRow: {
      type: Boolean,
      default: false,
    },
    currentRowKey: [String, Number],
    rowClassName: [String, Function],
  },
  methods: {
    handleSelect(selection, row) {
      if (this.$listeners['select']) {
        this.$emit('select', selection, row);
      }
    },
    handleSelectAll(selection) {
      if (this.$listeners['select-all']) {
        this.$emit('select-all', selection);
      }
    },
  },
};
</script>

这是基本的封装组件的外部代码,这里有一个自定义table组件,将其封装进Vue组件中。其中有props来支持所需的参数。

接下来,我们可以使用刚刚封装的组件来实现一些具体的功能。这里我们演示两个示例。

示例1:实现表格排序功能

我们实例化一个自定义table组件,并实现了表格排序功能。在data中定义一个数组,然后在created函数中对数组进行排序。

<template>
  <div>
    <custom-table :data="tableData" height="400">
      <el-table-column prop="name" label="名称"></el-table-column>
      <el-table-column prop="age" label="年龄" sortable></el-table-column>
      <el-table-column prop="gender" label="性别"></el-table-column>
    </custom-table>
  </div>
</template>

<script>
import customTable from '@/views/components/custom-table';

export default {
  name: 'sort-table',
  components: {
    customTable,
  },
  data() {
    return {
      tableData: [
        {
          name: '张三',
          age: 32,
          gender: '男',
        },
        {
          name: '李四',
          age: 25,
          gender: '女',
        },
        {
          name: '王五',
          age: 19,
          gender: '男',
        },
        {
          name: '赵六',
          age: 45,
          gender: '男',
        },
      ],
    };
  },
  created() {
    this.tableData.sort((a, b) => a.age - b.age);
  },
};
</script>

在这个示例中,我们定义了一个表格,其中有三列分别为“名称”、“年龄”和“性别”。我们可以在“年龄”列中设置sortable属性为true,也就是可以排序,这样就可以使用created函数对该数组进行排序。

示例2:实现表格分页功能

我们实例化一个自定义table组件,并实现了分页功能。在data中定义一个数组,然后在分页时通过methods函数进行分页处理。

<template>
  <div>
    <custom-table :data="tableData" :height="byPage ? (pageSize * 45 + 40 + 'px') : 'auto'">
      <el-table-column prop="name" label="名称"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
      <el-table-column prop="gender" label="性别"></el-table-column>
    </custom-table>
    <el-pagination :page-size="pageSize" :total="tableData.length" @current-change="currentChange"
      layout="prev, pager, next, jumper"></el-pagination>
  </div>
</template>

<script>
import customTable from '@/views/components/custom-table';

export default {
  name: 'pagination-table',
  components: {
    customTable,
  },
  data() {
    return {
      tableData: [
        {
          name: '张三',
          age: 32,
          gender: '男',
        },
        {
          name: '李四',
          age: 25,
          gender: '女',
        },
        {
          name: '王五',
          age: 19,
          gender: '男',
        },
        {
          name: '赵六',
          age: 45,
          gender: '男',
        },
        {
          name: '钱七',
          age: 25,
          gender: '女',
        },
        {
          name: '周八',
          age: 37,
          gender: '女',
        },
        {
          name: '吴九',
          age: 42,
          gender: '男',
        },
        {
          name: '郑十',
          age: 23,
          gender: '女',
        },
      ],
      currentPage: 1,
      pageSize: 3,
      byPage: true,
    };
  },
  methods: {
    currentChange(cPage) {
      this.currentPage = cPage;
    },
  },
  computed: {
    tableDataWithPage() {
      if (this.byPage) {
        const start = (this.currentPage - 1) * this.pageSize;
        const end = start + this.pageSize;
        return this.tableData.slice(start, end);
      }
      return this.tableData;
    },
  },
};
</script>

在这个示例中,我们定义了一个表格,使用了自定义的table组件,并且设置了分页功能。在el-pagination组件中,我们设置了total为tableData的长度,pageSize为每一页的数据量,然后定义一个computed函数进行计算。如果byPage被设为true,则表示启用了分页功能,根据当前的currentPage和pageSize来计算出要显示的数据。如果byPage为false,则表示不启用分页功能,直接把tableData赋值给tableDataWithPage即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:封装Vue Element的table表格组件的示例详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue 2.0中生命周期与钩子函数的一些理解

    Vue 2.0中生命周期与钩子函数的一些理解 Vue.js是一个非常受欢迎的渐进式JavaScript框架,其中生命周期和钩子函数是Vue.js的重要组成部分。 什么是生命周期? 生命周期是指Vue.js实例从创建到销毁的整个过程中所经过的各种阶段。这个过程可以被称为Vue的“生命周期”。 Vue 2.0中的生命周期可以分为8个阶段,分别是: beforeC…

    Vue 2023年5月28日
    00
  • 快速了解Vue父子组件传值以及父调子方法、子调父方法

    快速了解Vue父子组件传值以及父调子方法、子调父方法 在Vue中,组件通常会通过props属性传递数据,也可以使用$emit方法触发自定义事件来实现父调子方法和子调父方法。 父子组件传值 通过props属性传递数据 在父组件中使用props属性传递数据,子组件中使用props接收数据。比如: <!– 父组件 –> <template&g…

    Vue 2023年5月28日
    00
  • 浅析vue深复制

    浅析vue深复制 什么是深复制 在编程中,复制一个对象并不是简单地复制原先的地址,而是将原对象的所有数据都复制到一个新的内存地址中,我们称之为复制对象。当我们在拷贝一个对象的时候,有可能会遇到”浅复制”和”深复制”。 浅复制:复制对象时,指向某个指针的指针只能复制指针的值,而不能复制所指向的对象。因此,当我们改变所指向对象的内容时,指针也会发生相应的变化。 …

    Vue 2023年5月28日
    00
  • vue滚动插件better-scroll使用详解

    Vue 滚动插件 Better-Scroll 使用详解 插件介绍 Better-Scroll 是一款使用原生 JS 实现的插件,专门用于创建滚动效果的插件。 支持 Vue、React、Angular 等主流框架。 优点: 轻量、流畅、具有很好的兼容性、可以自定义样式和配置。 安装 可以使用 npm 安装 Better-Scroll 。 npm install…

    Vue 2023年5月27日
    00
  • Vue3中SetUp函数的参数props、context详解

    下面就为您详细讲解“Vue3中SetUp函数的参数props、context详解”的完整攻略。 什么是SetUp函数 SetUp函数是Vue3中的新特性,是用来替代Vue2.x中的 data和methods等相关选项的。在SetUp函数中,我们可以定义组件的状态和行为。如下是一个SetUp函数的示例: import { reactive } from ‘vu…

    Vue 2023年5月28日
    00
  • 使用 Vue cli 3.0 构建自定义组件库的方法

    使用 Vue cli 3.0 构建自定义组件库的方法可以通过以下步骤实现: 1. 创建一个新的 Vue 项目 使用 Vue cli 3.0 创建一个新项目: vue create my-library 2. 配置组件库 在 “src” 目录下创建一个 “components” 目录,所有组件都将存放在这个目录中。为了确保组件可以在其他项目中使用,我们需要将这…

    Vue 2023年5月28日
    00
  • VUE2.0+Element-UI+Echarts封装的组件实例

    下面是详细的讲解“VUE2.0+Element-UI+Echarts封装的组件实例”的完整攻略。 简介 “VUE2.0+Element-UI+Echarts封装的组件实例”是一个基于Vue.js、Element-UI和Echarts的组件封装实例,可以帮助开发者快速地构建数据可视化的应用。在本攻略中,我们将详细讲解如何利用这些工具来构建一个简单的数据可视化应…

    Vue 2023年5月28日
    00
  • Vue关于对象直接赋值的坑及解决

    Vue关于对象直接赋值的坑及解决 在Vue中,通过对象直接赋值的方式对一个对象进行修改,会引起一些潜在的问题。本攻略将详细讲解这个问题及其解决方案。 问题描述 假设有一个对象 obj: let obj = { name: ‘张三’, age: 20 } 现在在Vue组件中,我们使用这个对象: <template> <div> <…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部