vue 使用el-table循环生成表格的过程

yizhihongxing

下面我将详细讲解使用 Vueel-table 循环生成表格的完整攻略。该过程可以分为以下几个步骤:

  1. 引入必须的依赖

首先,需要在你的代码中引入必须的依赖,这包括 Vue 框架及其 Element-UI 组件库。

<!-- index.html -->
<!-- 引入 Vue 和 Element-UI-->
...
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
...
// app.js
// 创建 Vue 实例
new Vue({
  el: '#app',
  data: { 
    // 初始化数据
    tableData: [
      { id: '1', name: 'Lucy', age: '18' },
      { id: '2', name: 'Tom', age: '20' },
      { id: '3', name: 'Lily', age: '22' }
    ]
  }
})
  1. 创建 el-table 表格

Vue 实例中,创建 el-table 表格,并绑定数据 tableData。其中,el-table 的各个属性可以自行参考 Element-UI 官方文档 进行详细设置。

<!-- index.html -->
<!-- 表格部分 -->
<div id="app">
  <el-table :data="tableData">
    <!-- 表头部分 -->
    <el-table-column prop="id" label="编号"></el-table-column>
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="age" label="年龄"></el-table-column>
  </el-table>
</div>
  1. 循环生成表格数据

接下来,我们需要使用 v-for 指令来循环生成表格数据。我们需要先用 v-for 循环生成 el-table-column 组件,然后再在每个组件内部使用 {{ row.[prop] }} 语法来动态显示每行数据的属性。

<!-- index.html -->
<div id="app">
  <el-table :data="tableData">
    <!-- 循环生成表头 -->
    <el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label"></el-table-column>
  </el-table>
</div>
// app.js
new Vue({
  el: '#app',
  data: { 
    tableData: [
      { id: '1', name: 'Lucy', age: '18' },
      { id: '2', name: 'Tom', age: '20' },
      { id: '3', name: 'Lily', age: '22' }
    ],
    columns: [
      { prop: 'id', label: '编号' },
      { prop: 'name', label: '姓名' },
      { prop: 'age', label: '年龄' },
      // 可以根据数据实际情况自定义更多列
    ]
  }
})
  1. 自定义表格样式

最后,我们可以根据自己需要对表格样式进行一些自定义。例如,可以使用 slot-scope 自定义表格数据渲染的方式,如下所示:

<!-- index.html -->
<div id="app">
  <el-table :data="tableData">
    <!-- 循环生成表头 -->
    <el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label">
      <!-- 自定义表格数据的渲染方式 -->
      <template slot-scope="scope">
        <span v-if="column.prop === 'id'">ID {{scope.row.id}}</span>
        <span v-else>{{ scope.row[column.prop] }}</span>
      </template>
    </el-table-column>
  </el-table>
</div>

示例1的完整代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Vue Table</title>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">

    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>

<body>
    <div id="app">
        <el-table :data="tableData">
            <!-- 循环生成表头 -->
            <el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label">
                <!-- 自定义表格数据的渲染方式 -->
                <template slot-scope="scope">
                    <span v-if="column.prop === 'id'">ID {{scope.row.id}}</span>
                    <span v-else>{{ scope.row[column.prop] }}</span>
                </template>
            </el-table-column>
        </el-table>
    </div>

    <script>
        new Vue({
            el: '#app',
            data: {
                tableData: [{
                        id: '1',
                        name: 'Lucy',
                        age: '18'
                    },
                    {
                        id: '2',
                        name: 'Tom',
                        age: '20'
                    },
                    {
                        id: '3',
                        name: 'Lily',
                        age: '22'
                    }
                ],
                columns: [{
                        prop: 'id',
                        label: '编号'
                    },
                    {
                        prop: 'name',
                        label: '姓名'
                    },
                    {
                        prop: 'age',
                        label: '年龄'
                    },
                    // 可以根据数据实际情况自定义更多列
                ]
            }
        })
    </script>
</body>

</html>

示例2对数据进行了大量处理后再进行显示,完整代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Vue Table</title>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">

    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>

<body>
    <div id="app">
        <el-table :data="computedList">
            <!-- 自定义表格头部 -->
            <el-table-column label="所有用户" width="120">
                <template slot-scope="{ row }">
                    <div style="display: flex; align-items: center;">
                        <el-avatar :src="row.avatar" style="margin-right: 12px;"></el-avatar>
                        <span>{{ row.name }}</span>
                    </div>
                </template>
            </el-table-column>
            <el-table-column label="入职时间">
                <template slot-scope="{ row }">
                    {{ formatDate(row.hiredate) }}
                </template>
            </el-table-column>
            <el-table-column label="工龄">
                <template slot-scope="{ row }">
                    {{ calculateSeniority(row.hiredate) }}
                </template>
            </el-table-column>
            <!-- 自定义操作栏 -->
            <el-table-column label="操作">
                <template slot-scope="{ row }">
                    <el-button type="primary" size="mini" @click="click(row)">查看详情</el-button>
                </template>
            </el-table-column>
        </el-table>
    </div>

    <script>
        new Vue({
            el: '#app',
            data: {
                userList: [{
                        name: 'Andy',
                        avatar: 'https://randomuser.me/api/portraits/men/50.jpg',
                        hiredate: '2020-01-01'
                    },
                    {
                        name: 'Bob',
                        avatar: 'https://randomuser.me/api/portraits/men/51.jpg',
                        hiredate: '2019-11-11'
                    },
                    {
                        name: 'Claire',
                        avatar: 'https://randomuser.me/api/portraits/women/52.jpg',
                        hiredate: '2020-03-03'
                    },
                    {
                        name: 'David',
                        avatar: 'https://randomuser.me/api/portraits/men/53.jpg',
                        hiredate: '2018-05-05'
                    }
                ]
            },
            computed: {
                // 对数据进行计算和处理,然后返回表格需要的数据
                computedList() {
                    // 计算每个用户的工龄并添加到对象中
                    return this.userList.map(user => {
                        const seniority = this.calculateSeniority(user.hiredate)
                        return {
                            ...user,
                            seniority
                        }
                    })
                }
            },
            methods: {
                click(row) {
                    console.log(row)
                },
                formatDate(dateString) {
                    const date = new Date(dateString)
                    return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`
                },
                calculateSeniority(hiredateString) {
                    const hiredate = new Date(hiredateString)
                    const now = new Date()
                    const yearDiff = now.getFullYear() - hiredate.getFullYear()
                    const monthDiff = now.getMonth() - hiredate.getMonth()
                    const dayDiff = now.getDate() - hiredate.getDate()
                    return yearDiff * 12 + monthDiff + (dayDiff >= 0 ? 1 : 0)
                }
            }
        })
    </script>
</body>

</html>

以上就是使用 Vue 和 el-table 循环生成表格的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 使用el-table循环生成表格的过程 - Python技术站

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

相关文章

  • vue中添加与删除关键字搜索功能

    下面是“vue中添加与删除关键字搜索功能”的完整攻略。 1.创建搜索框 首先,我们需要在页面上创建一个输入框,供用户输入搜索关键字。可以使用Vue中的v-model指令来实现双向数据绑定,将用户输入的关键字与Vue实例中的数据绑定起来。 示例代码: <template> <div> <input type="text&…

    Vue 2023年5月27日
    00
  • vue3 组件与API直接使用的方法详解(无需import)

    vue3 组件与API直接使用的方法详解(无需import) 概述 在Vue 3中,通过创建应用程序实例或者通过使用 defineComponent 函数可以定义组件。组件可以直接使用Vue 3的全局API和Composition API上下文。 直接使用Vue 3的全局API Vue 3通过app.config.globalProperties属性,允许我…

    Vue 2023年5月27日
    00
  • 详解vue-cli项目中用json-sever搭建mock服务器

    下面是详解“详解vue-cli项目中用json-sever搭建mock服务器”的完整攻略: 一、什么是json-server JSON Server是一个基于Node.js的RESTful API服务器,可以通过在本地运行json文件中的数据创建完整的RESTful API,这在前端开发中用于测试和模拟数据非常有帮助。 二、在Vue-cli项目中安装json…

    Vue 2023年5月28日
    00
  • Vue循环遍历选项赋值到对应控件的实现方法

    Vue循环遍历选项赋值到对应控件是Vue中经常使用的一种数据绑定方式,可以方便地将数据在多个组件之间进行传递和渲染。下面是实现该功能的完整攻略。 方法一:使用v-for指令循环遍历选项 Vue提供了v-for指令用于循环遍历数组或对象,我们可以在模板中使用v-for指令循环遍历选项,并通过绑定v-model指令将选项和控件进行双向数据绑定,以实现将选项赋值到…

    Vue 2023年5月27日
    00
  • Vue动态加载图片在跨域时无法显示的问题及解决方法

    Vue动态加载图片在跨域时无法显示的问题是由于浏览器的同源策略导致的。下面我将提供两种解决方法: 方法一:使用代理 安装http-proxy-middleware中间件 npm install http-proxy-middleware –save-dev 在vue.config.js中配置代理 const proxyUrl = "http://…

    Vue 2023年5月28日
    00
  • Vue中ref和$refs的介绍以及使用方法示例

    Vue中ref和$refs的介绍以及使用方法示例 什么是ref 在Vue中, ref是一个特殊的属性,它可以在渲染组件模板时为其对应的元素或组件注册引用信息。 在创建一个vue实例时,我们经常会给一些元素或组件添加一个ref的特殊属性,这样在vue实例渲染出来后,我们就可以通过this.$refs.***的方式来获取对应元素或组件的引用,从而可以进行操作。 …

    Vue 2023年5月29日
    00
  • vue项目中js文件使用vue的this实例说明

    在Vue项目中,我们通常对Vue的this实例进行操作来完成逻辑,但在JS文件中使用Vue的this实例时,需要注意一些问题。下面是详细讲解“Vue项目中JS文件使用Vue的this实例”的攻略。 1. 环境搭建 首先,我们需要在Vue项目中安装相关的包: npm install vue –save-dev 然后,在脚本中导入Vue: import Vue…

    Vue 2023年5月27日
    00
  • vscode下的vue文件格式化问题

    下面是“vscode下的vue文件格式化问题”的完整攻略。 背景 在使用Vue.js进行前端项目开发时,在vscode中打开一个.vue文件后,格式化代码时会遇到一些问题。默认情况下,vscode只会格式化.html和.js部分的代码,而.vue文件中嵌套了.html、.css以及.js代码,所以需要进行一些配置才能完整格式化.vue文件。 解决方案 安装插…

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