element-ui中的el-table相关问题

9653次阅读 632人点赞 作者: WuBin 发布时间: 2023-04-04 15:37:59
扫码到手机查看

使用每一行的数据

比如我有如下json:

list: [
{
card_id: "14",
card_title: "242342",
card_author: "陈烛光",
template_id: "21",
template_preview: null,
created_at: "2023-04-03 14:48:25"
},
{
card_id: "13",
card_title: "我很四面",
card_author: "陈烛光",
template_id: "21",
template_preview: null,
created_at: "2023-04-03 09:25:07"
},
{
card_id: "12",
card_title: "33333",
card_author: "武斌",
template_id: "21",
template_preview: null,
created_at: "2023-04-03 09:09:31"
},
...
]

以及我的el-table如下:

<el-table :data="cardList"
           row-key="card_id"
           size="large"
           style="width: 100%"
>
    <el-table-column prop="card_id" label="卡片ID" width="80"></el-table-column>
    <el-table-column prop="card_title" label="卡片标题"></el-table-column>
    <el-table-column label="效果预览" width="100">
        <template #default="scope">
            <a class="temp-preview"
                v-if="scope.row.template_preview"
                :href="scope.row.template_preview"
                target="_blank"
                title="点击查看大图"
            >
                <img src="scope.row.template_preview">
            </a>
            <p v-else class="no-preview"></p>
        </template>
    </el-table-column>
    <el-table-column prop="card_author" label="编辑人员" width="100"></el-table-column>
    <el-table-column prop="created_at" label="创建日期" width="180"></el-table-column>
    <el-table-column label="操作" width="200">
        <template #default="scope">
            <el-button type="primary" @click="openCardEditor(scope.row)">编辑</el-button>
            <el-button type="danger">删除</el-button>
        </template>
    </el-table-column>
</el-table>

其中cardList就是对应的list中的数据。我们可以看到,如果要简单渲染,将每行中每一个字段对应的值渲染到模板中,只使用prop即可。但是如果我要自定义使用 这一行中某个字段的值呢

这时候,我们需要使用:

<template #default="scope">
            <a class="temp-preview"
                v-if="scope.row.template_preview"
                :href="scope.row.template_preview"
                target="_blank"
                title="点击查看大图"
            >
                <img src="scope.row.template_preview">
            </a>
            <p v-else class="no-preview"></p>
        </template>

其中scope.row对应的就是当前行,比如我现在是第三行,那么scope.row的值就是:

{
card_id: "12",
card_title: "33333",
card_author: "武斌",
template_id: "21",
template_preview: null,
created_at: "2023-04-03 09:09:31"
},

如果要用到第三行template_preview字段的值,那么就是:

scope.row.template_preview

需要注意的是,取出的scope是一个这种格式:

{store: {}, _self: {}, column: {}, row: Proxy, $index: 2}

scope.row是一个proxy,而如果我们需要取到行的index,那么:

scope.$index
额外的注意,遍历的时候最好要给每一行指定一个固定的row-key="card_id"

比如,el-table没有给每一行添加key时,当我们删除第二行数据时,焦点会自动聚焦在变为第二行的第三行数据按钮上。

原因:

删除一行数据时,Vue会认为我们把2变成了3,把3删除了。所以只会把第二行的数据变成第三行,但是按钮的状态会就地复用。

解决:

给每一行添加一个key,el-table设置row-key

<el-table :row-key="record=>record.id"></el-table>// id为表格数据中的一个属性(唯一),record为每一行数据

或者

<el-table row-key="id"></el-table>// row-key此时不带冒号,绑定值为数据中属性id
注:表格中不建议使用index作为key,删除数据时,索引会自动连续,(1,2,3删除第2,索引会自动变成1,2,而不是1,3)所以Vue仍然会认为删除的是第3项,而不是第2项。

让表格内容居中

有两种方式,第一种:

<el-table :data="cardList"
                  :stripe="true"
                  :border="true"
                  :header-cell-style="{'text-align':'center'}"
                  :cell-style="{'text-align':'center'}"
                  size="large"
                  style="width: 100%"
        >

:header-cell-和:cell-

header-cell-style表头单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有表头单元格设置一样的 Style。function({ row, column, rowIndex, columnIndex }) / object
cell-style单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有单元格设置一样的 Style。function({ row, column, rowIndex, columnIndex }) / object

直接设置统一的样式即可。

第二种:

<el-table-column align="center" />

相关资料

点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:el-table
推荐阅读
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    9603次阅读 623人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • Vue

    盘点Vue2和Vue3的10种组件通信方式

    Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异;本文将通过选项式API组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式。

    4297次阅读 317人点赞 发布时间: 2022-08-19 09:40:16 立即查看
  • JS

    几个高级前端常用的API

    推荐4个前端开发中常用的高端API,分别是MutationObserver、IntersectionObserver、getComputedstyle、getBoundingClientRect、requ...

    14452次阅读 948人点赞 发布时间: 2021-11-11 09:39:54 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    13497次阅读 491人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    12015次阅读 963人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    16376次阅读 1307人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    15187次阅读 1234人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    29853次阅读 2347人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    25911次阅读 1994人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录