Vue中动态展示数据的字典项

问题描述

今天在写自己网站的时候,遇到一个问题,不知道各位前端初学者有没有遇到过这个问题

如图所示:我通过接口查询到一些信息,有两个属性是枚举数据(魔法值)

我们称这种数据为字典项,因为开发中一般称0,1,2称这种数据为字典项,而他们的集合成为字典

比如说sex(性别)是一个字典项,它有两个字典项:0代表女,1代表男

在这里插入图片描述

当然,作为后端人员,想处理这种问题简直不要太简单,我可以通过mysql的case when函数,或者在service进行三元运算符等逻辑处理都是可以的。

但是我今天想在前端解决这个问题,经过我的研究,找到了两种实现方式,正好我有两个数据都是这样类型的,那就一种方式解决一个把。

解决问题

解决问题之前,我觉得不管是处于前端还是后端工作人员,都应该知道字典项的含义,在我的项目里,是这么定义的:

在这里插入图片描述

搞清楚字典和字典项之后,就可以编写逻辑判断代码了

方式1 使用插槽

这种方式就是使用vue中的插槽,根据scope.row.x获取改行的某个属性,然后根据三元运算符动态的区进行判断和展示数据

scope.row可以传这一行数据的所有属性作为参数,删除的时候就可以使用它把id传过来进行删除

为了方便对比,我把两个展示性别的代码放在一起进行比较

在这里插入图片描述

这样页面上就是我们想要的数据了,而不是枯涩的字典值

在这里插入图片描述
关键代码如下:

 <!-- 直接展示接口获取到的性别 -->
  <el-table-column
      prop="sex"
      label="性别"
      width="90"
      align="center"
    ></el-table-column>

    <!-- 判断字典项.根据字典项进行动态展示性别信息 -->
     <el-table-column label="性别" width="60" align="center"  prop="sex">
         <template slot-scope="scope">{{ scope.row.sex === 0 ? '女' : '男' }}</template>
      </el-table-column>
    <el-table-column

方式2 使用formatter格式化

使用formatter,它是element-ui的table组件中众多属性的其中一个:

在这里插入图片描述

也可以找到它的使用说明:

在这里插入图片描述

它使用起来也很简单,简单来说就是可以给table的表头一个formatter属性,用于格式化指定列的值,接受一个Function,会传入两个参数:row和column,可以根据自己的需求进行处理。

格式为:

 <!-- 通过formatter格式化status字典项 -->
    <el-table-column
      prop="status"
      label="状态"
      width="90"
      align="center"
      :formatter="formatter"
    ></el-table-column>

 methods: {
    formatter(row,column) {
      console.log('row='+row)
      console.log('column'+column) 
    }
}

row和column这两个参数,都是对应的某一条完整的数据

首先看下row吧

在这里插入图片描述
可以看到,有几条数据就有几条row

在这里插入图片描述

点击某条row,可以看到这条row里面的全部字段信息

在这里插入图片描述

接下来是cloumn

在这里插入图片描述

其实和row一样的

在这里插入图片描述

所以我个人喜欢用row去做格式化判断,通过row.x获取该行的属性进行格式化判断

但是如果声明了column参数但是不适用,页面就编译不了,所以我通常只会保存row参数,舍去column参数

在这里插入图片描述
在这里插入图片描述

所以完整写法应该是:

这里我依然是暴露了格式化和原生两种方式做对比

在这里插入图片描述

也是可以正常展示我们想要的数据的

在这里插入图片描述

扩展

1. formatter函数自定义

不要觉得formatter函数一定要叫formatter,可以根据自己的业务场景灵活改变的,比如我这个是判断status的,我就可以把formatter对应的函数名称改为statusFormatter,效果也是一样的
在这里插入图片描述
在这里插入图片描述
前面的:formatter可不能改啊,这是官网定义好的,如果改了就不行了!

在这里插入图片描述

倒不是说会报错,只是不生效

在这里插入图片描述

使用column代替row格式化

上面提到过,row和column是一样的,name既然row可以做到,column是不是也可以做到呢?

答案是可以的,不过我更喜欢使用row,因为row就是行的意思,在此处代表的就是一行,显得更加形象

在这里插入图片描述

效果也是一样的:

在这里插入图片描述

2.26更新(多个字典项)

我发现上面的写法由于我用的是三目运算符嘛,所以在两个字典项的时候是好使的,但是如果多个字典项,这种方式就不太好了。正好今天遇到了这种情况,简单补充下

如图:我这两个字段的字典项都是2个以上的

在这里插入图片描述

处理这种情况,还是可以使用formatter的方式,写法也基本类似,代码如下:

在这里插入图片描述

不要着急直接返回,通过if判断属性的值,把符合的值返回出来

由于逻辑一样,我就把第二个方法收起来了,只展示第一个方法

当然也能通过v-if在页面判断。或者定义一个字典数组。最好是通过后端获取字典数组,不然放在前端老修改挺麻烦的。

在这里插入图片描述

简单看下效果吧:

在这里插入图片描述

总结

以上就是我发现的两种动态展示字典项的方式了,大家根据各自的需求两个选择即可,我个人更喜欢第一种。

当然不止这两种方式,如果有别的方式或者好用的第三方库也欢迎评论留言

我是后端开发,描述的可能不是很清楚,如果有哪里出错,欢迎评论或者私信告诉我,希望多多包涵。

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小花皮猪

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值