ElementUI中的el-table怎样实现每一列显示的是控件并能动态实现双向数据绑定

摘要:
data=“tableData”stripestyle=“100%”>El table columnprop=“date”label=“date”width=“180”>El table columnprop=“name”label=“name“width=“180”>El table columnprop=“address”label=“address“>
场景

要实现在ElementUI的表格中每一列展示的不是数据而是控件。效果如下

ElementUI中的el-table怎样实现每一列显示的是控件并能动态实现双向数据绑定第1张

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

普通表格官方示例代码

<template>
  <el-table
    :data="tableData"
    stripe
    style=" 100%">
    <el-table-column
      prop="date"
      label="日期"
      width="180">
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名"
      width="180">
    </el-table-column>
    <el-table-column
      prop="address"
      label="地址">
    </el-table-column>
  </el-table>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }]
      }
    }
  }
</script>

要实现每列中使用的是控件的话可以使用

template来实现

          <el-table-column label="指定天数" align="center" prop="ts" width="150">
            <template slot-scope="scope">
              <el-select
                clearable
                @change="changezdts(scope.row)"
                v-model="bcglXiangXiList[scope.row.xh-1].ts"
              >
                <el-option
                  v-for="dict in zdtsOptions"
                  :key="dict.dictValue"
                  :label="dict.dictLabel"
                  :value="dict.dictValue"
                />
              </el-select>
            </template>
          </el-table-column>

这里是在此列使用下拉框控件作为模板

这里要添加slot-scope属性。添加这个属性可以在后面获取到某一行。

完整示例代码

       <el-table
          v-loading="loading"
          :data="bcglXiangXiList"
          :row-class-name="rowClassName"
          @selection-change="handleDetailSelectionChange"
          ref="tb"
        >
          <el-table-column type="selection" width="30" align="center" />
          <el-table-column label="序号" align="center" prop="xh"  width="50">
          </el-table-column>

          <el-table-column label="开始时间/最早时间-结束时间/最晚时间" width="250" prop="sjfw">
            <template slot-scope="scope">
              <el-time-picker
                is-range
                format="HH:mm"
                value-format="HH:mm"
                :style="{ '100%'}"
                start-placeholder="开始时间"
                end-placeholder="结束时间"
                range-separator=""
                clearable
                @change="changesjfw(scope.row)"
                v-model="bcglXiangXiList[scope.row.xh-1].sjfw"
              ></el-time-picker>
            </template>
          </el-table-column>

          <el-table-column label="指定天数" align="center" prop="ts" width="150">
            <template slot-scope="scope">
              <el-select
                clearable
                @change="changezdts(scope.row)"
                v-model="bcglXiangXiList[scope.row.xh-1].ts"
              >
                <el-option
                  v-for="dict in zdtsOptions"
                  :key="dict.dictValue"
                  :label="dict.dictLabel"
                  :value="dict.dictValue"
                />
              </el-select>
            </template>
          </el-table-column>
          <el-table-column label="打卡地点" align="center" prop="dkdd" width="150">
            <template slot-scope="scope">
              <el-select
                clearable
                @change="changedkdd(scope.row)"
                v-model="bcglXiangXiList[scope.row.xh-1].dkdd"
              >
                <el-option
                  v-for="dict in dkddOptions"
                  :key="dict.dictValue"
                  :label="dict.dictLabel"
                  :value="dict.dictValue"
                />
              </el-select>
            </template>
          </el-table-column>

          <el-table-column label="最小井下累计时间-最大井下累计时间" width="250" prop="jxsjfw">
            <template slot-scope="scope">
              <el-time-picker
                is-range
                format="HH:mm"
                value-format="HH:mm"
                :style="{ '100%'}"
                start-placeholder="开始时间"
                end-placeholder="结束时间"
                range-separator=""
                clearable
                @change="changejxsjfw(scope.row)"
                v-model="bcglXiangXiList[scope.row.xh-1].jxsjfw"
              ></el-time-picker>
            </template>
          </el-table-column>
        </el-table>

在使用可控件之后再使用v-model进行双向数据绑定时就是动态数据绑定了。

这里首先设置el-table的数据源为 一个对象数组

          :data="bcglXiangXiList"

然后添加一个单选框

<el-table-column type="selection" width="30" align="center" />

通过@selection-change="handleDetailSelectionChange"

设置其勾选事件

    //单选框选中数据
    handleDetailSelectionChange(selection) {
      if (selection.length > 1) {
        this.$refs.tb.clearSelection();
        this.$refs.tb.toggleRowSelection(selection.pop());
      } else {
        this.checkedDetail = selection;
      }
    },

实现单选并保存选中项。

前提要设置el-table的ref="tb"并且this.checkedDetail 需要提前声明

  data() {
    return {
      //选中的从表数据
      checkedDetail: [],

然后添加了一列序号用来保存行的索引号,通过设置el-table的

 :row-class-name= "rowClassName"

来实现

    rowClassName({ row, rowIndex }) {

      row.xh = rowIndex + 1;
    },

然后怎样对每个控件进行v-model数据绑定,通过

  v-model="bcglXiangXiList[scope.row.xh-1].ts"

使用scope.row可以获取到当前行对象。

通过scope.row.xh可以获取到当前行的xh字段属性,因为之前设置了xh为行的索引+1

而数组的索引从0开始,所以这里是xh-1

            <template slot-scope="scope">
              <el-select
                clearable
                @change="changezdts(scope.row)"
                v-model="bcglXiangXiList[scope.row.xh-1].ts"
              >
                <el-option
                  v-for="dict in zdtsOptions"
                  :key="dict.dictValue"
                  :label="dict.dictLabel"
                  :value="dict.dictValue"
                />
              </el-select>
            </template>

免责声明:文章转载自《ElementUI中的el-table怎样实现每一列显示的是控件并能动态实现双向数据绑定》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS OpenURL用法简介Linux objcopy命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

13.solr学习速成之IK分词器

IKAnalyzer简介 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。 IKAnalyzer特性 a. 算法采用“正向迭代最细粒度切分算法”,支持细粒度和最大词长两种分词方式,速度最大支持80W字/秒(1600KB/秒)。   b. 支持多子处理器分析模式:中文、数字、字母,并兼容日文、韩文。  c. 较小的...

C#中的Session

一: 网站开发中,为了保存用户信息我们就会用到session。 Session具有以下特点:(1)Session中的数据保存在服务器端;(2)Session中可以保存任意类型的数据;(2)Session默认的生命周期是20分钟,可以手动设置更长或更短的时间。 我们在aspx页面中的调用一般只需要这么写:<%=session["key"]=value...

小米开源便签Notes-源码研究(1)-导出功能整体思路

NotesListActivity是入口Activity。响应菜单事件,我的手机是“左键菜单”。如果菜单项的ID是“R.id.menu_export_text”,就执行导出,保存到/mnt/sdcard/MIUI/notes目录下。@Override public boolean onOptionsItemSelected(MenuItem item)...

JavaWeb——相对路径和绝对路径

绝对路径的问题: 1)开发时建议编写“绝对路径”:写绝对路径肯定没有问题,但写相对路径却可能会有问题。 在由Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址,则可能会出现路径混乱的问题 /a.jsp   -path     /b.jsp     /c.jsp a.jsp-&...

html5和html的区别

最近看群里聊天聊得最火热的莫过于手机网站和html5这两个词。可能有人会问,这两者有什么关系呢?随着这移动互联网快速发展的时代,尤其是4G时代已经来临的时刻,加上微软对“XP系统”不提供更新补丁、维护的情况下“html5+css3”也逐渐的成为新一代web前端技术,手机网站也渐渐的成为一种趋势。 什么是html5呢? html5最先由WHATWG(Web...

Google 74版本上传附件没有“选择文件”按钮

这是因为flash插件权限受到限制,需要修改注册表,才能将允许运行Flash的网站名单加入进去。 新建adobe-flash-player.reg注册表文件,将下面内容复制到文件中(使用notepad打开,注意编码问题)。 Windows Registry Editor Version 5.00[HKEY_CURRENT_USERSOFTWAREPoli...