el-element中el-table表格嵌套el-select实现动态选择对应值功能
先看问题还原图:
问题描述:
小编在做需求时,遇到了在el-table表格中加入多条数据,并且每条数据要通过el-select来选取相应的值,做到动态选择。
解决方法:
思路:
- 最开始,小编的实现效果是左边红色框的效果,选择其中一个时,其他的也对应赋值。
- 主要是因为el-option的选项都是相同的,v-model 的值也是相同的。
- 那让每一条 v-model 的值不同不就好了么!!
代码:
html中代码:
<el-table-column label="文档类别" prop="categoryName"> <template slot-scope="scope"> <el-select :ref="'categoryName' + scope.$index" v-model="tableData[scope.$index]['categoryName']" placeholder="请选择文档类别" clearable > <el-option :value="tableData[scope.$index]['categoryName']" style="height: auto"> <el-tree :ref="'categoryNameTree' + scope.$index" :data="typeList" node-key="id" :props="typeTreeProps" @node-click="getTypeList(scope.$index)" > <span slot-scope="{ node }">{{ node.label }}</span> </el-tree> </el-option> </el-select> </template> </el-table-column>
代码解说:
在 < el-table > 中绑定数据 :data="tableData" tableData 为数组
el-select中
- scope.$index ----- 为tableData中每条数据的下标
- :ref="'categoryName' + scope.$index" ----- 设置 ref ,用户选择完值后 el-option 自动隐藏
- v-model="tableData[scope.$index]['categoryName']" ----- 绑定动态的 v-model ,很重要。要注意的是 tableData[scope.$index] 是通过下标找当数组tableData中当前选择的数据。而这个 categoryName 参数必须是数组 tableData 中存在的。
el-option中
- :value="tableData[scope.$index]['categoryName']" ----- 与 v-model 相同,绑定动态值
el-tree中
:ref="'categoryNameTree' + scope.$index" ----- 与 el-select 中 ref 相同
@node-click="getTypeList(scope.$index)" ----- 选择数据时触发,传当前元素的下标
data中:
data() { return { tableData: [] // 接口返回的数据,:data绑定在el-table中 typeList: [], // 接口返回的数据,展现在el-option中,用el-tree包裹 typeTreeProps: { children: 'children', label: 'name' }, categoryName: '' } }
methods中:
getTypeList(index) { // .getCurrentKey()获取到当前要选择节点的key值 // 使用此方法必须设置 node-key 属性,若没有节点被选中则返回 null const nodeId = this.$refs['categoryNameTree' + index].getCurrentKey() // .getNode(nodeId) 根据 data 或者 key 拿到 Tree 组件中的 node const node = this.$refs['categoryNameTree' + index].getNode(nodeId) // 根据index给当前元素的categoryName参数赋值 this.$set(this.tableData[index], 'categoryName', node.label) this.$set(this.tableData[index], 'categoryNo', node.data.docTypeNo) // 此时页面上已经可以动态选择 // 这一步是通过判断当前元素的v-model是否有值来控制el-option是否隐藏 if (this.tableData[index].categoryName) { // .blur()用来隐藏当前展开的下拉选择框 this.$refs['categoryName' + index].blur() } },
this.$refs['categoryName' + index] 设置动态是因为,在有多条数据时,如果不是动态的,但凡有没有值的选择框,就不会触发。而这样就可以通过index来判断隐藏那条元素。
总结:
遇到新的问题就会有新的知识增加,其实入职后有很多很多值得学习,并且记住的知识,但都因年底的原因,项目要保证封版后bug都解决掉而忙忘掉,翻回来去想记录的时候又不从下手。
到此这篇关于el-element中el-table表格嵌套el-select实现动态选择对应值功能的文章就介绍到这了,更多相关el-table表格动态选择对应值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
ElementUI下拉组件el-select一次从后端获取选项并设置默认值方式
这篇文章主要介绍了ElementUI下拉组件el-select一次从后端获取选项并设置默认值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-01-01element-ui tree 异步树实现勾选自动展开、指定展开、指定勾选功能
这篇文章主要介绍了element-ui tree 异步树实现勾选自动展开、指定展开、指定勾选,项目中用到了vue的element-ui框架,用到了el-tree组件,由于数据量很大,使用了数据懒加载模式,即异步树,需要的朋友可以参考下2022-08-08vite前端构建Turborepo高性能monorepo方案
这篇文章主要为大家介绍了vite前端构建Turborepo高性能monorepo方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-08-08
最新评论