前言

实际上我需要的功能类似于前端工程中的字典。由于在前端的学习自己写代码的过程中可能不会对一个项目工程化的如此的彻底,所以这里给出了一种解决方法。

需求

对于Element UI里的表格,如果假设传入data的数据为数字(事实上其他的字母之类的也可)代表为表格的一些固定选项,而不是直接传入字符串,怎样实现替换。比如对于某个表格的选项,传入的数据用0表示否,1表示是这样的固定选项,而在el-table-column常用的方式是用prop规定数据属性传入数据,那么在表格里只能显示出来0或1的数字,达不到我们的需求。

解决方式

  1. 首先对于需求我们想到的方式是用v-if来设定判定条件,在el-table-column里写两个span来解决问题,一个直接数据显示为是,另一个为否,然后通过需要传入的数据来直接v-if判定切换。
  2. 很明显该方法对于变化量较小的数据可以使用,甚至可对付几种数据对应结果的方式。但是即使在不考虑vue中v-if反复的重新渲染占用资源的情况下,所有情况全部复制修改一遍也着实显得异常麻烦。那么这里我们可以尝试这种方式:
<el-table-column
   label="选择是否"
   align="center">
  <template scope="scope">
    <span>{{[ "是", "否" ][scope.row.is]}} </span>
   </template>
</el-table-column>

这里实际上是利用了js原生语言里的对于**[]**这一运算符的使用。它作为数组相关的运算符,还具有取数组值的方法。那么对于这句

<span>{{[ "是", "否" ][scope.row.is]}} </span>

实际上就是对前面定义的数组通过后面的中括号[]运算符运算符取值,你传入的scope.row.is就是要取的下标值,那么对于0对应否,1对应是的需求就解决了,对于多种对应的需求也是同理。事实上这种方法还可以推广至传入数据下标不是从0开始的对应方式。

  1. 对于第二种方式,如果我传入的是类似于长串的数据(比如202101,202102)或者选择的字符(‘A’,‘B’,‘C’),又该如何拓展呢。可以尝试这个写法:
<el-table-column
  label="学期"
  sortable
  align="center">
   <template scope="scope">
     <span>{{
     ({20211:"2021年春季学期1",
       20212:"2021年春季学期2",
       20213:"2021年秋季学期1",
       20214:"2021年秋季学期2",}[scope.row.term])
       }}</span>
    </template>
 </el-table-column>

对于字符也是同理:

<span>{{
     ({'A':"2021年春季学期1",
       'B':"2021年春季学期2",
       'C':"2021年秋季学期1",
       'D':"2021年秋季学期2",}[scope.row.term])
       }}</span>

原理同上,实际上也是取数组里的值。