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

首先介绍一下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框架中必掌握的重点知识

    学习Vue框架中必掌握的重点知识 组件基础 Vue的组件是Vue应用的基本模块。组件是可复用的,Vue应用将一个页面划分为多个组件并组成组件树。组件是拥有自己的状态和生命周期的可复用模块。了解组件的定义、注册、渲染以及组件之间的通信是掌握Vue的关键。 组件的定义和注册 组件的定义是通过Vue.extend()和Vue.component()方法来实现的。V…

    Vue 2023年5月28日
    00
  • vue使用Print.js打印页面样式不出现的解决

    当我们使用 Vue 和 Print.js 打印页面时,可能会发现打印出来的样式完全不同于实际页面的样式,这里提供一种解决方法。 问题分析 我们首先需要了解,Print.js 是基于浏览器打印机的 JavaScript 插件,它通过重构 HTML 并针对特定媒体类型(例如打印机或 PDF 输出)重新生成 CSS 样式表,并提供可定制的打印选项。然而,Print…

    Vue 2023年5月27日
    00
  • vue脚手架vue-cli的卸载与安装方式

    下面是关于“vue脚手架vue-cli的卸载与安装方式”的完整攻略。 一、卸载vue-cli 1. 全局卸载 如果你使用的是全局安装的方式,则可以使用npm命令进行卸载。在命令行中输入以下命令: npm uninstall -g vue-cli 2. 本地卸载 如果你使用的是本地安装的方式,则需要进入到项目中进行卸载。在项目中打开命令行窗口,输入以下命令: …

    Vue 2023年5月27日
    00
  • Vue中CSS scoped的原理详细讲解

    Vue中的CSS scoped可以实现局部作用域,从而避免全局CSS样式造成的样式冲突。在Vue组件中使用scoped属性,可以使得CSS只作用于当前组件,而不会影响到其他组件或全局CSS的样式。 下面是实现scoped的原理: Vue编译器会将组件的模板和样式分别处理,然后生成纯JS代码 在处理样式时,编译器会将scoped属性添加到组件的根元素上 在生成…

    Vue 2023年5月28日
    00
  • 分析Vue指令实现原理

    分析Vue指令实现原理的完整攻略包括以下步骤: 1. 了解Vue指令的基本概念 Vue指令是Vue.js框架提供的一种特殊的语法糖, 用于对DOM元素进行操作。常见的指令有v-bind, v-if, v-for, v-on等。每个指令都有特定的作用和用法。 2. 学习Vue指令的语法结构 Vue指令的语法结构如下: v-指令名[:参数]="表达式&…

    Vue 2023年5月27日
    00
  • vue.js入门教程之计算属性

    下面是关于“vue.js入门教程之计算属性”的完整攻略: 什么是计算属性 计算属性是Vue.js的一个重要特性,它能够对绑定的数据进行计算,然后返回一个新的值。 Vue.js官网对计算属性的介绍: 计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要message没有发生改变,多次访问计算属性vm.rever…

    Vue 2023年5月27日
    00
  • Vue XStream 2016 中文破解版安装教程(附破解文件)

    下面我将为您详细讲解“Vue XStream 2016 中文破解版安装教程(附破解文件)”的完整攻略。具体步骤如下: 第一步:下载安装包和破解文件 首先,你需要下载 Vue XStream 2016 中文破解版的安装包和破解文件。可以在百度网盘或者其它资源网站中寻找下载链接。 下载好后,将其解压缩。 第二步:进入安装程序 进入解压缩后的文件夹,找到其中的“s…

    Vue 2023年5月27日
    00
  • Vue select 绑定动态变量的实例讲解

    下面我将详细讲解如何在Vue中使用select绑定动态变量的实例攻略。 首先,我们需要导入Vue.js,然后创建Vue实例,并在该实例的data属性中定义我们需要绑定的动态变量(这里我们定义一个变量名为selectedValue)。然后我们需要在Vue实例中声明一个options对象,其中包含一个数组,该数组中包含我们需要绑定到select元素的选项。最后,…

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