我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ant-design-vue中table自定义格式渲染的方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ant-design-vue中table自定义格式渲染的方法是什么

本篇内容介绍了“ant-design-vue中table自定义格式渲染的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

ant-design-vue中table自定义格式渲染

一般业务开发中,难免会遇到将一些状态值(如 0 / 1)转化为相应的描述(如 关闭 / 开启),也可能是对日期时间的格式化,如下两图转化前后对比:

ant-design-vue中table自定义格式渲染的方法是什么

ant-design-vue中table自定义格式渲染的方法是什么

开始之前,需要注意的是,定义的 columns 一定要写在 data 中,否则在加载过程中由于渲染顺序会导致其中的渲染函数无法识别。

有两种方式修改:

1、直接调用对应插槽模板

<template>  <div class="vehicle-list">    <a-table :columns="columns" :data-source="data" bordered>      <template slot="tradeState" slot-scope="state">        {{ state === 1 ? '交易完成' : (state === 0 ? '等待交易' : '交易失败') }}      </template>      <template slot="tradeTime" slot-scope="time">        {{ timeFormat(time) }}      </template>    </a-table>  </div></template><script>import moment from 'moment'const columns = [  {    title: '交易状态',    dataIndex: 'tradeState',    // customRender: 'tradeState' -> 自定义 slot 属性名,对应模版中的 slot 属性,即这里自定义为啥,对应模版中的 slot 就要等于啥    // 模板中对应的 slot-scope 属性可以用来传递三个参数(val,row,index),分别是当前值、当前行数据和当前索引    scopedSlots: { customRender: 'tradeState' }  },  {    title: '交易时间',    dataIndex: 'tradeTime',    scopedSlots: { customRender: 'tradeTime' }  }]const data = [  {    key: '1',    tradeState: 1,    tradeTime: '2020-11-01T12:50:19+08:00'  },  {    key: '2',    tradeState: -1,    tradeTime: '2020-11-02T18:06:32+08:00'  },  {    key: '3',    tradeState: 0,    tradeTime: '2020-11-03T08:25:03+08:00'  }]export default {  name: 'VehicleList',  data () {    return {      data,      columns    }  },  methods: {    timeFormat (val) { // 时间格式化函数      return moment(val).format('YYYY-MM-DD HH:mm:ss')    }  }}</script>

2、指定渲染函数

<template>  <div class="vehicle-list" >    <a-table :columns="columns" :data-source="data" bordered></a-table>  </div></template><script>import moment from 'moment'const columns = [  {    title: '交易状态',    dataIndex: 'tradeState',    customRender: (state) => { // customRender属性是一个方法,可接收三个参数(val,row,index),分别是当前值、当前行数据和当前索引,与方式 1 中模版的 slot-scope 属性传参类似      return state === 1 ? '交易完成' : (state === 0 ? '等待交易' : '交易失败')    }  },  {    title: '交易时间',    dataIndex: 'tradeTime',    customRender: (time) => moment(time).format('YYYY-MM-DD HH:mm:ss')  }]const data = [  {    key: '1',    tradeState: 1,    tradeTime: '2020-11-01T12:50:19+08:00'  },  {    key: '2',    tradeState: -1,    tradeTime: '2020-11-02T18:06:32+08:00'  },  {    key: '3',    tradeState: 0,    tradeTime: '2020-11-03T08:25:03+08:00'  }]export default {  name: 'VehicleList',  data () {    return {      data,      columns    }  }}</script>

对比以上,可以看出方式2代码更加简洁,且易读性更好。

ant-design-vue快速上手指南+排坑

公司要开发一个后台管理系统,对于UI库的选择上选择了颜值爆表的Ant-Design-Vue作为整个项目UI库,但谁曾想,暗中的坑一个接一个,文档也不怎么详细,可能习惯了element-ui的掘友们也许不怎么好适应,本文就带大家一起学习如何高效使用Ant-Design-Vue。

NO.1 表单组件

首先就来说说最常用的Form组件的正确使用姿势:

先来看官方一段话述:

第一、我们不推荐在Form中使用双向绑定,同一份数据可能在多处使用,如果使用双向绑定,那么数据的修改会同时同步到各个组件,但这并不是我们想要的, 你应该在表单提交成功或失败或确认时同步数据,使用非双向绑定的表单,你会拥有最大限度的控制数据修改/同步的权限。

第二、如果你不使用表单的自动校验/收集功能,即没有使用v-decorator修饰过的组件,你依然可以使用v-model

看了官方的建议后,我们愉快的使用v-decorator修饰input组件,代码如下:

<a-form-item>          <a-input            placeholder="账号"            v-decorator="['account',{rules: [{ required: true,whitespace:true,message: '请输入您的登陆账号' }]}]"            /></a-form-item>

划重点:

v-decorator里的account可以理解为input的name值,后面{}对象可以配置校验规则,初始值等参数,这里需要注意的是使用了v-decorator的组件无法使用v-model,也无法设置value等与值有关的属性,否则报错 

v-decorator会自动收集你表单里的数据到form对象里,所以别忘了在data中加上这句代码:

form: this.$form.createForm(this)

ant-design-vue中table自定义格式渲染的方法是什么

模板中这么写:

ant-design-vue中table自定义格式渲染的方法是什么

如何自定义表单校验规则

这里拿确认密码举例:

<a-input       type="password"       v-decorator="['new_password',{rules:[{required: true,whitespace:true,message: '请输入新密码'},{validator: handlePass}]}]"/><a-input        type="password"        v-decorator="['confirm_password',{rules:[{required: true,whitespace:true,message: '请重复新密码'},{validator:handleConfirmPass}]}]"/>

这里我们使用validator校验器自定义函数

handlePass(rule, value, callback) {      this.password = value;      callback();},handleConfirmPass(rule, value, callback) {      if (this.password && this.password !== value) {           callback('与新密码输入不一致');      }      callback();},

这里需要注意callback()必须调用

这里的value就是对应表单输入了的值,然后知道了这些我们就可以写我们自己的业务逻辑了

做好的效果如图:

ant-design-vue中table自定义格式渲染的方法是什么

表单回显

我们在做编辑时首先需要通过后端接口读取到之前的数据,但是因为现在没有了v-model,那么我们该怎么办?

可以调用form对象中的setFieldsValue把后端返回的对象直接设置上去,如果是在mounted方法里必须加上$nextTick,不然会抛出警告说我们在表单未渲染好之前给予了数据

代码如图:

ant-design-vue中table自定义格式渲染的方法是什么

图中setFieldsInitialValue是设置表单初始值,如果表单中有重置按钮,就需要设置上,重置按钮调用this.form.resetFields()就可以重置form表单了

这个setFieldsValue方法会把传进去的对象的key和模板中v-decorator中的第一个参数比较,会自动把对应的值set进去。

提交表单

ant-design-vue中table自定义格式渲染的方法是什么

按钮加上html-type="submit"后点击会触发这个方法,这个方法校验表单中所有必填项没有问题后会自动帮我们把表单中所有带有v-decorator修饰的组件的值和name序列化好,我们就可以直接传给后端了。

NO.2 表格(Table)

我们的模板可以这么写:

ant-design-vue中table自定义格式渲染的方法是什么

ant-design-vue的表格自带分页,接下来我把上图中的参数挨个解释下,columns是单元格信息,我们可以把他导出为一个数组,如下图:

ant-design-vue中table自定义格式渲染的方法是什么

这里的title是用户看到的文字,dataIndex要和后台传过来的字段一致,不然数据不会显示出来,其次还提供了customRender和scopedSlots两种方式自定义内容,这里使用了第一种方式,但值得一提的是如果使用的是slot-scope方式,在模板中定义一个点击事件,想要获取到当前行的数据时,一定一定不要加dataIndex属性,否则会是undefined

看一个scopedSlots使用的例子:

ant-design-vue中table自定义格式渲染的方法是什么

ant-design-vue中table自定义格式渲染的方法是什么

可以看到上面定义columns时给action没有加dataIndex

我们继续看dataSource是什么,他就是你给table传递的数据

  • rowKey可以理解为时循环时需要的key(必有)

  • pagination初始化一个空对象

  • scroll定义表格可以横向滚动

  • handleTableChange是当分页数据发生改变时抛出的事件

为了简化操作,我这里封装了一个mixin,当页面中有table时直接混入mixin就支持分页和拉取数据的逻辑了,代码如下:

export const mixin = {  data() {    return {      pagination: {},      data: [],    };  },  methods: {    handleTableChange(pagination) {      const pager = {...this.pagination};      pager.current = pagination.current;      this.pagination = pager;      this.loadData({        page: pagination.current      });    },    async loadData(params = {}) {      try {        const {data: table_data, total, per_page} = await this.loadMethod('flush' in params ? {page: 1} : {page: 1, ...params});        const pagination = {...this.pagination};        pagination.total = total;        pagination.pageSize = per_page;        'flush' in params && (pagination.current = 1);        this.data = table_data;        this.pagination = pagination;      } catch (e) {        console.log(e);      }    }  }};

flush用于标识是否是插入新数据或者删除了数据,如果是我们直接把page重置为1返回第一页

我们在页面使用只需要以下几行代码:

import { getLog } from '@/api/api';import { mixin } from '@/mixins';export default {  name: "log",  mixins: [mixin],  data() {    return {      columns,      loadMethod: getLog    };  },  mounted() {    this.loadData();  }};

这样其他类似的组件也可以直接复用本逻辑。

NO.3 Spin组件

我们平时在后台管理系统中,ajax请求过程中都会出现全屏加载提示的遮罩层,做这个功能时我想到了这个组件,然后去官方文档查看,看到了如下图的操作方式:

ant-design-vue中table自定义格式渲染的方法是什么

然后粘贴到代码中,各种操作,没有任何反应,甚至有时候还来点小报错,Spin组件肯定是引入了,反正就是最后怎么操作都没成功,无奈之下,自己用了他的样式写了个Vue的Spin插件:

我们首先新建Loading.vue

<template>  <div v-if="show" class="loading-container">    <div class="loading-mask"></div>    <div class="loading-content">      <a-spin tip="正在加载数据中..." size="large">      </a-spin>    </div>  </div></template><script>export default {  name: 'Loading',  props: {    show: Boolean,  },  data() {    return {    }  }}</script><style lang="scss" scoped>  .loading-container{    position: relative;    text-align: center;    z-index:9999;    .loading-mask{      position: fixed;      top:0;      bottom:0;      left:0;      right:0;      background-color:rgba(0,0,0,.7);    }    .loading-content{      position: fixed;      left: 50%;      top: 50%;      z-index: 300;      transform: translate(-50%,-50%);      text-align: center;      color:#fff;    }  }</style>

然后再新建Loading.js

import Vue from 'vue';import loadingComponent from './Loading.vue';const LoadingConstructor = Vue.extend(loadingComponent);const instance = new LoadingConstructor({  el: document.createElement('div')});instance.show = false; // 默认隐藏const loading = {  show() { // 显示方法    instance.show = true;    document.body.appendChild(instance.$el);  },  hide() { // 隐藏方法    instance.show = false;  }};export default {  install() {    if (!Vue.$loading) {      Vue.$loading = loading;    }    Vue.mixin({      created() {        this.$loading = Vue.$loading;      }    });  }};

然后在main.js中

import loading from '@/components/Loading/loading.js';Vue.use(loading);

然后我们就可以愉快的调用了:

Vue.$loading.show();

打包优化

首先就是用官方快速上手中提供的按需加载,这里不再赘述,使用之后还存在以下问题:

里面的moment.js,还有lodash,还有icon的dist居然占用了我们500KB的空间,这不能忍,那怎么办呢?

new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),

我们首先忽略掉语言包,然后看看图标怎么优化:

ant-design-vue中table自定义格式渲染的方法是什么

 config.resolve.alias      .set('@', resolve('class="lazy" data-src'))      .set('@ant-design/icons/lib/dist$',resolve('class="lazy" data-src/icon.js'))

我们还需要在class="lazy" data-src文件夹下面加一个文件 icons.js

//自己项目里面用到的Iconexport {default as UserOutline} from '@ant-design/icons/lib/outline/UserOutline';export {default as CloseCircleFill} from '@ant-design/icons/lib/fill/CloseCircleFill';export {default as InfoCircleFill} from '@ant-design/icons/lib/fill/InfoCircleFill';export {default as CheckCircleFill} from '@ant-design/icons/lib/fill/CheckCircleFill';

我们还可以开启gzip压缩等,使用DLL优化我们的打包速度。

“ant-design-vue中table自定义格式渲染的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ant-design-vue中table自定义格式渲染的方法是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ant-design-vue中table自定义格式渲染的方法是什么

本篇内容介绍了“ant-design-vue中table自定义格式渲染的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ant-de
2023-07-04

ant-design-vue中的table自定义格式渲染解析

这篇文章主要介绍了ant-design-vue中的table自定义格式渲染,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

java中定义方法的格式是什么

所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。一般情况下,定义一个方法的语法是:其中:1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被
java中定义方法的格式是什么
2018-03-02

qt自定义表格的方法是什么

在Qt中,可以使用QTableView类来创建和操作表格。下面是一些自定义表格的方法:1. 设置表格模型:使用QStandardItemModel类或自定义的QAbstractTableModel类创建表格模型,并使用setModel()方
2023-09-29

vue自定义动态组件的方法是什么

本篇内容主要讲解“vue自定义动态组件的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue自定义动态组件的方法是什么”吧! Vue.extend 思路就是拿到组件的构造函数,这样我们
2023-07-04

vue自定义指令使用的方法是什么

这篇“vue自定义指令使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue自定义指令使用的方法是什么”文章吧
2023-07-05

vue自定义指令directive使用的方法是什么

本篇内容主要讲解“vue自定义指令directive使用的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue自定义指令directive使用的方法是什么”吧!1. 一个指令定义对象可
2023-07-06

Vue element el-table-column中对日期进行格式化的方法是什么

这篇文章主要讲解了“Vue element el-table-column中对日期进行格式化的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue element el-table
2023-07-06

Mysql中自定义函数的创建和执行方法是什么

本文小编为大家详细介绍“Mysql中自定义函数的创建和执行方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql中自定义函数的创建和执行方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Mys
2023-03-13

Spring中使用自定义ThreadLocal存储导致的坑及解决方法是什么

本篇文章为大家展示了Spring中使用自定义ThreadLocal存储导致的坑及解决方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Spring自定义ThreadLocal存储导致的坑Spr
2023-06-21

在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么

今天就跟大家聊聊有关在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言systemd是Linux操作系统的系统
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录