封装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+element表格实现多层数据的嵌套方式

    实现多层数据的嵌套方式,可以通过使用Element UI table组件来实现。具体步骤如下: 步骤1:定义表格结构 首先要定义表格的结构,包括表头的内容和渲染每行数据的方式。Vue的template语法可以很方便地组织表格结构,示例代码如下: <template> <el-table :data="tableData"…

    Vue 2023年5月27日
    00
  • 详解vue-meta如何让你更优雅的管理头部标签

    下面是详解vue-meta如何让你更优雅的管理头部标签的攻略。 什么是vue-meta? vue-meta 是在Vue中操作头部标签(meta 标签、title 标签等等)的一个插件。通过 vue-meta 可以让我们在 Vue 组件内方便的定义和修改这些标签。使用 vue-meta ,我们可以更加方便和优雅的管理头部标签,从而使得我们的网站更加 SEO 友…

    Vue 2023年5月28日
    00
  • vue开发chrome插件,实现获取界面数据和保存到数据库功能

    准备工作 在开发vue开发chrome插件前,我们需要先安装vue-cli脚手架和Chrome浏览器。 安装命令: npm install -g vue-cli 创建新项目 通过vue-cli脚手架创建新项目,并选择webpack模板。 vue init webpack my-project 安装依赖: cd my-project && np…

    Vue 2023年5月28日
    00
  • Vue中如何优雅的捕获 Promise 异常详解

    在 Vue 中,可以通过 Promise 处理异步操作。当 Promise 中发生异常时,Vue 会抛出一个全局的未捕获异常的错误信息。为了更好的捕获 Promise 异常,我们可以采用一些优雅的方法。 优雅的捕获 Promise 异常 Vue 2.6 后提供了一个全局错误处理器(config.errorHandler),我们可以利用这个处理器进行全局的异常…

    Vue 2023年5月28日
    00
  • vuex状态持久化在vue和nuxt.js中的区别说明

    接下来我会详细讲解有关“vuex状态持久化在vue和nuxt.js中的区别说明”的攻略。 1. 什么是vuex状态持久化 Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,例如用户信息、用户账户等。在Vuex中,状态state、mutation(操作状态的函数)和action(异步操作state的函数)被定义…

    Vue 2023年5月27日
    00
  • 详解vue.js组件化开发实践

    详解Vue.js组件化开发实践 Vue.js是一款简单易用,功能十分强大的前端框架,其中组件化开发是Vue的一大特点,本文将详细讲解Vue.js组件化开发实践的完整攻略。 为什么要使用组件化开发 组件化开发是将页面拆分成不同的功能块,每个块独立封装成一个组件,从而实现重复利用和减少代码耦合,提高开发效率和维护性。在大型项目中使用组件化开发将十分必要。 组件化…

    Vue 2023年5月27日
    00
  • vue的el-select绑定的值无法选中el-option问题及解决

    当使用Vue的el-select组件时,可能会遇到无法选中el-option的问题。这个问题常见于el-option基于v-for动态渲染的情况下。 出现这个问题的原因,是因为el-select组件中v-model绑定的值和el-option组件中v-bind:value绑定的值类型不一致导致的。解决这个问题有以下两种方法: 方法一:更换v-model绑定的…

    Vue 2023年5月28日
    00
  • Vuex的实战使用详解

    Vuex的实战使用详解 Vuex是Vue.js官方提供的状态管理库,可以帮助我们更方便地管理Vue组件中的状态(数据)。下面将介绍Vuex的使用方法和常见应用场景。 安装和使用 安装:使用npm或yarn安装Vuex bash npm install vuex –save # 或者 yarn add vuex 在Vue项目中引入Vuex,并创建store实…

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