vue项目element-ui级联选择器el-cascader回显的问题及解决
作者:wocwin
这篇文章主要介绍了vue项目element-ui级联选择器el-cascader回显的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
vue项目element-ui级联选择器el-cascader回显问题
1、需求
el-cascader内部是数组形式的,而后台接口只需传入数组的最后一个字段,但修改时候往往也只返回这最后一个字段,导致el-cascader无法正确回显
2、原因分析
v-model属性才是回显的关键,只有绑定了v-model属性才会让 <el-cascader \/>
回显,而且数组中的值(即:targetViewId
值)一定是最后一级的id加上它父级的id组成
3、解决方案
由于后端返回来的只有最后一级的id,所以我们需要写一个递归来拿到最后一级id和它父级id的数组。废话不多说直接上代码
/* * el-cascader递归获取父级id * @param list 数据列表 * @param id 后端返回的id * propsCascader 是el-cascader props属性 **/ getParentsById(list, id) { for (let i in list) { if (list[i][this.propsCascader.value || 'value'] == id) { return [list[i][this.propsCascader.value || 'value']] } if (list[i].children) { let node = this.getParentsById(list[i].children, id) if (node !== undefined) { // 追加父节点 node.unshift(list[i][this.propsCascader.value || 'value']) return node } } } },
4、效果图
5、注意
如果直接将targetViewId赋值后台返回的最后一个id值,也能回显(最后一级没有选中),其效果如下:
vue+elementui el-cascader回填功能
<el-cascader style="width:97%;margin:5px 0;" v-model="dataInfo2" :options="subjects" :props="defaultProps" @change="handleChange" placeholder="请选择数据表" size="small"> </el-cascader> updateChart(id) { this.$http.get('url?id='+id) .then(res => { if (res.data.success === true) { this.dataTableId = res.data.data.dataTableId this.dragTo.values = res.data.data.dragTo this.$refs.hottable.editShowTableMe(res.data.data) this.$http.post('url', {id: this.dataTableId}) .then(response => { this.dataInfo2 = [response.data.data[0].directoryId,this.dataTableId] this.dragFrom.measures = [] this.dragFrom.measures = response.data.data[0].design.schema.measure this.deleteChecked() }) .catch(function(error) { console.log(error) }) } }) .catch(err => { console.log(err) }) }, deleteChecked() { var arr = [] for (let i = 0; i < this.dragFrom.measures.length; i++) { for (let j = 0; j < this.dragTo.values.length; j++) { if ( this.dragFrom.measures[i].column === this.dragTo.values[j].column ) { arr.push(i) } } } for (var k = 0; k < arr.length; k++) { if (k == 0) { this.dragFrom.measures.splice(arr[k], 1) //删除arr[0],删除一个 } else { this.dragFrom.measures.splice(arr[k] - k, 1) //删除arr[0],删除一个,这样判断的意思是一直从第一个开始删除 } } },
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。