一次用vue3简单封装table组件的实战过程

yizhihongxing

下面给出使用Vue 3简单封装table组件的完整攻略:

1. 创建组件

首先,我们需要在Vue项目中创建一个table组件。可以通过以下命令创建:

vue create my-app

其中,my-app是你的项目名称。

在创建好项目后,我们可以在src/components目录下创建一个table目录,并在其中添加Table.vue文件来实现Table组件。Table.vue中的基本代码结构如下:

<template>
  <div>
    <!-- 表格内容 -->
  </div>
</template>

<script>
export default {
  name: 'Table',
  props: {
    // 表格相关的属性
  },
  data() {
    return {
      // 表格相关的数据
    }
  },
  methods: {
    // 表格相关的方法
  }
}
</script>

在组件中,我们需要定义一些props来实现参数的传递,并且需要设置一些数据和方法来实现表格的渲染和操作。

2. 渲染表头和表格内容

接下来,我们需要在Table.vue中添加表头和内容的渲染机制。可以通过以下代码实现:

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th v-for="(column, index) in columns" :key="index">{{ column.title }}</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in data" :key="index">
          <td v-for="(column, idx) in columns" :key="idx">{{ item[column.key] }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
export default {
  name: 'Table',
  props: {
    columns: {
      type: Array
    },
    data: {
      type: Array
    }
  },
  data() {
    return {}
  },
  methods: {}
}
</script>

在代码中,利用v-for指令遍历columns数组和data数组分别渲染表头和表格内容。columns数组用于存储表头信息,包括每一列的标题、宽度、数据源等,而data数组则是表格数据的来源。

3. 实现表格的排序功能

排序是常用的表格操作之一,下面给出在Table组件中实现排序的代码:

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th v-for="(column, index) in columns" :key="index" @click="handleSort(column.key)">
            {{ column.title }} <span v-if="column.key === sortField">{{ sortType === 'asc' ? '↑' : '↓' }}</span>
          </th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in dataSorted" :key="index">
          <td v-for="(column, idx) in columns" :key="idx">{{ item[column.key] }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
export default {
  name: 'Table',
  props: {
    columns: {
      type: Array
    },
    data: {
      type: Array
    }
  },
  data() {
    return {
      sortField: '',
      sortType: '',
      dataSorted: this.data
    }
  },
  methods: {
    handleSort(key) {
      if (this.sortField === key) {
        this.sortType = this.sortType === 'asc' ? 'desc' : 'asc'
      } else {
        this.sortField = key
        this.sortType = 'asc'
      }

      this.dataSorted = this.data.slice().sort((a, b) => {
        if (this.sortType === 'asc') {
          return a[key] - b[key]
        } else {
          return b[key] - a[key]
        }
      })
    }
  }
}
</script>

在代码中,定义了sortFieldsortType属性来记录当前排序的字段和方式。在表头中,添加了一个点击事件@click来触发handleSort方法,该方法用于改变sortFieldsortType的值,并重新对数据源data进行排序,最后将排序后的数据存入dataSorted属性中。

以上就是用Vue 3简单封装table组件的完整攻略,下面给出两个相关的示例说明:

示例一:使用table组件渲染静态数据

<template>
  <div>
    <Table :columns="columns" :data="data" />
  </div>
</template>

<script>
import Table from '@/components/table/Table.vue'

export default {
  name: 'Demo',
  components: {
    Table
  },
  data() {
    return {
      columns: [
        {
          title: '姓名',
          key: 'name'
        },
        {
          title: '年龄',
          key: 'age'
        },
        {
          title: '性别',
          key: 'gender'
        }
      ],
      data: [
        {
          name: '小红',
          age: 23,
          gender: '女'
        },
        {
          name: '小明',
          age: 26,
          gender: '男'
        },
        {
          name: '小兔',
          age: 27,
          gender: '女'
        },
        {
          name: '小黄',
          age: 22,
          gender: '男'
        }
      ]
    }
  }
}
</script>

在代码中,引入了Table组件,并通过columnsdata两个props来传递表头和表格数据。注意,这里的数据是静态的,在实际操作中可能需要从后台接口动态获取。

示例二:在使用table组件时实现排序功能

在这个示例中,我们需要使用Table组件展示从后台获取的数据,并实现排序功能。可以通过以下代码实现:

<template>
  <div>
    <Table :columns="columns" :data="data" :sort-field="sortField" :sort-type="sortType" @sort-change="handleSortChange" />
  </div>
</template>

<script>
import axios from 'axios'
import Table from '@/components/table/Table.vue'

export default {
  name: 'Demo',
  components: {
    Table
  },
  data() {
    return {
      columns: [
        {
          title: 'ID',
          key: 'id'
        },
        {
          title: '名称',
          key: 'name'
        },
        {
          title: '创建时间',
          key: 'createTime'
        }
      ],
      data: [],
      sortField: '',
      sortType: ''
    }
  },
  methods: {
    fetchData() {
      axios.get('/api/data').then(res => {
        this.data = res.data
      })
    },

    handleSortChange(sortField, sortType) {
      this.sortField = sortField
      this.sortType = sortType
      this.fetchData()
    }
  },
  created() {
    this.fetchData()
  }
}
</script>

在代码中,引入了axios库来发送网络请求并获取后台的数据,将数据存入data数组中,然后传递给Table组件进行渲染。同时,添加了sort-fieldsort-type两个props来传递排序的字段和方式,并通过@sort-change事件监听Table组件中排序的变化,触发handleSortChange方法重新获取数据并渲染表格。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一次用vue3简单封装table组件的实战过程 - Python技术站

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

相关文章

  • 基于vue如何发布一个npm包的方法步骤

    发布一个基于 vue 的 npm 包的步骤,可以分为以下几个步骤: 1. 初始化 npm 包 npm init 按照提示依次输入各个信息,最后生成 package.json 文件。 2. 创建 vue 组件 这里以一个 Button 组件为例: <template> <button :class="classObject&quot…

    Vue 2023年5月28日
    00
  • 解决vue.js提交数组时出现数组下标的问题

    当使用Vue.js提交表单数据数组时,会出现一个常见的问题,即无法获取到数组的下标,导致后台无法正确处理提交的数据。解决这个问题的方法很简单,本文将提供一些完整的攻略,帮助您解决这个问题。 问题分析 接下来的代码创建了一个表单,其中包含了一个可变长度的input数组。我们尝试提交这个表单,并触发表单提交事件: <form @submit.prevent…

    Vue 2023年5月29日
    00
  • vue + element-ui实现简洁的导入导出功能

    Vue是一种灵活的前端框架,Element UI是一个基于Vue.js 2.0的桌面端组件库,它能够很好地展现你的数据和交互。下面我将详细讲解如何使用Vue和Element UI实现简洁的导入导出功能。 步骤一:安装依赖 首先,你需要安装Vue和Element UI,打开终端,输入以下命令: npm install vue npm install eleme…

    Vue 2023年5月27日
    00
  • vue实现文件上传和下载

    下面就是 Vue 实现文件上传和下载的完整攻略。 文件上传 实现方式 文件上传可以采用传统的表单上传方式,也可以使用 Ajax 实现无刷新上传。这里我们以使用表单的方式为例进行讲解。 Vue.js 并没有提供直接上传文件的方法,需要借助第三方插件来实现。目前比较常用的插件有 vue-file-upload、vue-simple-upload、vue-uplo…

    Vue 2023年5月28日
    00
  • element vue Array数组和Map对象的添加与删除操作

    下面是关于Element Vue中Array数组和Map对象的添加和删除操作的完整攻略。 Array数组的添加和删除 添加元素 向数组中添加元素可以使用原生的Javascript方法push()、unshift(),也可以使用Vue的$set()方法。 首先,我们创建一个数组arr,然后使用push()和unshift()方法添加元素。 <script…

    Vue 2023年5月28日
    00
  • 仿vue-cli搭建属于自己的脚手架的方法步骤

    下面是我为您准备的详细步骤: 1. 初始化项目 首先,我们需要创建一个空的项目文件夹,然后进入该文件夹,使用以下命令进行初始化: npm init -y 该命令会生成一个 package.json 文件,其中包含了项目的基本描述和依赖信息。 2. 添加依赖 接着,我们需要添加一些必要的依赖,包括: commander:用于解析命令行参数 inquirer:用…

    Vue 2023年5月28日
    00
  • vue框架通用化解决个性化文字换行问题实例详解

    对于“vue框架通用化解决个性化文字换行问题实例详解”的攻略,我将按照以下标题进行讲解。 解决方案背景和问题描述 在使用Vue框架开发应用时,我们经常会遇到一些个性化问题,例如文字长度不一致引起的换行问题。在这种情况下,我们需要一种通用的解决方案,能够在不同场景下灵活地适应不同的需要。因此,本文将介绍一种如何解决Vue框架下个性化文字换行问题的通用方案。 具…

    Vue 2023年5月27日
    00
  • 解决vue-cli中stylus无法使用的问题方法

    下面是完整的“解决vue-cli中stylus无法使用的问题方法”的攻略。 问题描述 在使用vue-cli创建Vue项目的过程中,通过命令行工具安装完stylus插件后,却无法使用stylus的语法。 原因分析 vue-cli默认并未安装stylus插件,因此如果要在Vue项目中使用stylus,需要先通过npm或者yarn等包管理工具手动安装stylus插…

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