理解vue之element-ui中的 <template slot-scope="scope">

本文解析了Element UI中Table组件的高级用法,重点介绍了&lt;templateslot-scope=scope&gt;的使用技巧及scope参数的意义,帮助开发者更好地理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果有用过element-ui中的table组件,可能会发现有这么一个写法:

<template slot-scope="scope">

在实际的使用过程中,这种用法当然不仅仅局限于此,其他的地方也会用到。到底这里有什么特别之处呢?

我们看看普通的table用法:

我们先说一说这个基础的用法里面,在el-table中,:data="tableData"是数据集,结构如下:

那么对于每一个el-table-column,我们只需要使用prop="date",就可以将该列的数据绑定为该数组所有的对象中的“date”属性,我们可以理解为对于tableData,这里始终取的是tableData[$index].date。

table按照tableData这个数组的长度来生成多少行,按照有多少个el-table-column来生成多少列。

 

现在我们可以看更高级的用法,也就是我们标题提到的<template slot-scope="scope">

    <el-table-column
      label="日期"
      width="180">
      <template slot-scope="scope">
        <i class="el-icon-time"></i>
        <span style="margin-left: 10px">{{ scope.row.date }}</span>
      </template>
    </el-table-column>

按照我们前面的理解,按照有多少个el-table-column来生成列,因此这里没有使用prop="date",生成的单元格也就是空白的一个单元格。

template(模版) 在这里属于一个固定用法: <template slot-scope="scope">

我们主要说一下这个scope是个什么东西,按照element上的提示:

通过 Scoped slot 可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据

我们可以理解为:tableData是给到table的记录集,scope是table内部基于tableData生成出来的,我们可以用Excel描绘一下

我们传进去的tableData,在table内部生成了类似于Excel的scope,因此,通过scope.row.date,我们就可以读取到每一行中的date。

还有重要的一点,scope又并非是整个table,我们只是能通过scope.row获得当前的行数据,至于具体为什么,目前我还没有理解得很透彻。只是希望按照这个理解,能记住多点关于scope的使用。

 

本文纯属个人的理解,如有不当的地方敬请指点!

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>员工信息</title> </head> <link rel="stylesheet" href="element-ui/index.css"> <script src="./js/vue.js"></script> <script src="./element-ui/index.js"></script> <script src="./js/axios-0.18.0.js"></script> <body> <h1 align="center">员工信息列表展示</h1> <div id="app"> <el-table :data="tableData" style="width: 100%" stripe border > <el-table-column prop="name" label="姓名" align="center" min-width="20%"></el-table-column> <el-table-column prop="age" label="年龄" align="center" min-width="20%"></el-table-column> <el-table-column label="图像" align="center" min-width="20%"> <template slot-scope="scope"> <el-image :src="scope.row.image" style="width: 80px; height: 50px;"></el-image> </template> </el-table-column> <el-table-column prop="gender" label="性别" align="center" min-width="20%"></el-table-column> <el-table-column prop="job" label="职位" align="center" min-width="20%"></el-table-column> </el-table> </div> </body> <style> .el-table .warning-row { background: oldlace; } .el-table .success-row { background: #f0f9eb; } </style> <script> new Vue({ el: "#app", data() { return { tableData: [] } }, mounted(){ axios.get('/listEmp').then(res=>{ if(res.data.code){ this.tableData = res.data.data; } }); }, methods: { } }); </script> </html> 帮我追加两条入职时间和更新时间
06-24
要为现有的HTML页面添加两个新的列来显示“入职时间”和“更新时间”,我们需要对HTML和JavaScript代码进行相应的修改。下面是详细的步骤和修改后的代码: ### 修改步骤 1. **HTML部分**:在表格中添加两个新的列来显示“入职时间”和“更新时间”。 2. **JavaScript部分**:确保返回的数据中包含这两个新字段,并在页面加载时正确显示它们。 ### 修改后的代码 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>员工信息</title> </head> <link rel="stylesheet" href="element-ui/index.css"> <script src="./js/vue.js"></script> <script src="./element-ui/index.js"></script> <script src="./js/axios-0.18.0.js"></script> <body> <h1 align="center">员工信息列表展示</h1> <div id="app"> <el-table :data="tableData" style="width: 100%" stripe border> <el-table-column prop="name" label="姓名" align="center" min-width="15%"></el-table-column> <el-table-column prop="age" label="年龄" align="center" min-width="10%"></el-table-column> <el-table-column label="图像" align="center" min-width="20%"> <template slot-scope="scope"> <el-image :src="scope.row.image" style="width: 80px; height: 50px;"></el-image> </template> </el-table-column> <el-table-column prop="gender" label="性别" align="center" min-width="10%"></el-table-column> <el-table-column prop="job" label="职位" align="center" min-width="15%"></el-table-column> <el-table-column prop="hireDate" label="入职时间" align="center" min-width="15%"></el-table-column> <el-table-column prop="updateTime" label="更新时间" align="center" min-width="15%"></el-table-column> </el-table> </div> </body> <style> .el-table .warning-row { background: oldlace; } .el-table .success-row { background: #f0f9eb; } </style> <script> new Vue({ el: "#app", data() { return { tableData: [] } }, mounted() { axios.get('/listEmp').then(res => { if (res.data.code) { this.tableData = res.data.data.map(item => ({ ...item, hireDate: item.hireDate ? new Date(item.hireDate).toLocaleString() : '', updateTime: item.updateTime ? new Date(item.updateTime).toLocaleString() : '' })); } }); }, methods: {} }); </script> </html> ``` ### 解释 1. **HTML部分** - 在 `<el-table>` 内部添加了两个新的列: - `<el-table-column prop="hireDate" label="入职时间" align="center" min-width="15%"></el-table-column>` - `<el-table-column prop="updateTime" label="更新时间" align="center" min-width="15%"></el-table-column>` 2. **JavaScript部分** - 在 `mounted` 钩子函数中,当从服务器获取数据后,使用 `map` 方法遍历 `res.data.data` 数组,为每条记录添加格式化后的 `hireDate` 和 `updateTime` 属性。 - 使用 `new Date(...).toLocaleString()` 将时间戳转换为本地可读的日期时间格式。 ### 知识点 1. **Element UI组件**:`<el-table-column>` 用于定义表格的列,`prop` 属性指定数据源属性。 2. **Vue.js生命周期钩子**:`mounted` 钩子在实例挂载后调用,适合用于发送请求初始化数据。 3. **日期格式化**:使用 `new Date().toLocaleString()` 将时间戳转换为本地时间字符串,便于用户阅读。
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇I洒

创作不易,觉得有用就鼓励一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值