Vue 学习随笔系列十二 -- 表格内容渲染方法

表格内容渲染方法


1、使用 formatter 函数

示例代码1

<el-table-column prop="status" label="状态" align="center" :formatter="scopeIdFormat" width="auto" />

methods:{
   //大类显示对应状态
    scopeIdFormat(row, column, cellValue){
        return row.status == '0' ? "开启" : "关闭"
    }
}

示例代码2

	<el-table
      size="small"
      border
      v-loading="loading"
      :data="tableData"
      @selection-change="select"
    >
      <el-table-column
        type="selection"
        width="55"
      >
      </el-table-column>

      <el-table-column
        v-for="(item, index) in columns"
        :key="index"
        v-bind="item"
        align="center"
      >
      <el-table-column>
   </el-table>

columns: [
	{
		type:"index",
		label: "序号“,
		width: "55",
		align: "center"
	},
	{
	  label: "状态",
	  prop: "status",
	  formatter: (value, column) => {     //写上formatter函数
	    return value == '0' ? "开启" : "关闭"
	},
]

2、 使用 render 函数

	<el-table
      size="small"
      border
      v-loading="loading"
      :data="tableData"
      @selection-change="select"
    >
      <el-table-column
        type="selection"
        width="55"
      >
      </el-table-column>

      <el-table-column
        v-for="(item, index) in columns"
        :key="index"
        v-bind="item"
        align="center"
      >
      <el-table-column>
   </el-table>


columns: [
	{
		type:"index",
		label: "序号“,
		width: "55",
		align: "center"
	},
	{
        key: "name",
        title: "名称",
        minWidth: 250,
        align: "center",
        render: (h, params) => {
          return h("div", [
            h( "a",
              {
                props: {
                  type: "primary",
                  size: "small",
                },
                on: {
                  click: () => {
                    this.clickRow(params.row); //添加点击事件
                  },
                },
              },
              params.row.name // 展示内容
            ),
          ]);
        },
      },
       {
         key: "itemNum",
         title: "总数",
         minWidth: 150,
         align: "center",
         render: (h, params) => {
           return h(
             "div",
             this.formaterNum(params.row.itemNum) // 调用数据处理的方法
           );
         }
       },
],


methods: {
	// 点击事件
	clickRow(row) {
		console.log(111, row)
	},
	// 自定义数据处理方法
    formaterAmount(data) {
      if (!data) return '0.00'
      // 将数据分割,保留两位小数
      data= data.toFixed(2)
      // 获取整数部分
      const intPart = Math.trunc(data)
      // 整数部分处理,增加,
      const intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
      // 预定义小数部分
      let floatPart = '.00'
      // 将数据分割为小数部分和整数部分
      const newArr = data.toString().split('.')
      if (newArr.length === 2) { // 有小数部分
        floatPart = newArr[1].toString() // 取得小数部分
        return intPartFormat + '.' + floatPart
      }
      return intPartFormat + floatPart
    }
}

3、使用 template 自定义

<el-table
      size="small"
      border
      v-loading="loading"
      :data="tableData"
    >
      <el-table-column
        v-for="(item, index) in columns"
        :key="index"
        v-bind="item"
        align="center"
      >
        <template slot-scope="scope">
          <span v-if="item.prop==='status'">
            <el-image
              class="icon-img"
              :src="'../../start.img"
            ></el-image>
            <span>{{ scope.row[item.prop] }}</span>
          </span>
          <span v-else>{{ scope.row[item.prop] }}</span>
        </template>

      </el-table-column>
    </el-table>

4、使用 slot 插槽

<el-table
      size="small"
      border
      v-loading="loading"
      :data="tableData"
    >
      <el-table-column
        v-for="(item, index) in columns"
        :key="index"
        v-bind="item"
        align="center"
      >
        <template slot-scope="scope" slot="status">
          <span>{{ scope.row.status == '0' ? "开启" : "关闭"}}</span>
        </template>
      </el-table-column>
 </el-table>
 
columns: [
	{
		type:"index",
		label: "序号“,
		width: "55",
		align: "center"
	},
	{
		 label: "状态",
		 prop: "status",
		 slot: "status",
  	}
]

5、注意

使用template 自定义时,columns中的序号列显示不出来,需要在代码中重新编写,
例:

<el-table
      size="small"
      border
      v-loading="loading"
      :data="tableData"
    >
   	  <el-table-column
   	  label="序号"
   	  type="index"
   	  >
      </el-table-column>
      <el-table-column
        v-for="(item, index) in columns"
        :key="index"
        v-bind="item"
        align="center"
      >
        <template slot-scope="scope" slot="status">
          <span>{{ scope.row.status == '0' ? "开启" : "关闭"}}</span>
        </template>
      </el-table-column>
 </el-table>
 
columns: [
	// {
	// 	type:"index",
	// 	label: "序号“,
	// 	width: "55",
	// 	align: "center"
	// },
	{
	  label: "状态",
	  prop: "status",
	  slot: "status",
    }
]

相关推荐

  1. Vue 学习随笔系列 -- 表格内容渲染方法

    2024-04-04 12:28:02       43 阅读
  2. vue实现维数组表格渲染

    2024-04-04 12:28:02       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 12:28:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 12:28:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 12:28:02       82 阅读
  4. Python语言-面向对象

    2024-04-04 12:28:02       91 阅读

热门阅读

  1. 01 使用ArcGIS生成节点路径

    2024-04-04 12:28:02       32 阅读
  2. hadoop3.0高可用分布式集群安装

    2024-04-04 12:28:02       37 阅读
  3. Python 自动备份文件到远程目录(Windows适用)

    2024-04-04 12:28:02       30 阅读
  4. Python程序设计 单例模式

    2024-04-04 12:28:02       34 阅读
  5. 【Qt】使用Qt实现Web服务器(十):前端基础

    2024-04-04 12:28:02       32 阅读
  6. Qt5.14.2 揭秘Qt日志神器高效诊断程序潜在隐疾

    2024-04-04 12:28:02       26 阅读