el-cascader添加tooltip

231 阅读1分钟

问题

级联选择器选中回显后,由于长度过长导致展示不全,添加ei-tooltip,悬浮展示选中内容

核心内容

1、通过ref获取el-cascader实例,调用getCheckedNodes()获取选中节点,通过pathLabels属性拿到节点的label数组。 2、通过设置el-tooltipdisabled,来控制el-tooltip的显隐

实现代码

没有默认值时,通过change事件去获取tooltip展示内容,如下:

// 用el-tooltip包裹el-cascader,自定义tooltipValue存放选中节点的内容.
// disabled设置当没有内容时,tooltip不展示
<template>
<el-tooltip placement="bottom-start" :content="tooltipValue" :disabled="!tooltipValue">
     <el-cascader
        ref="cascaderRef"
        v-model="selectedVal"
        :options="optionsList"
        @change=“changeEvent"
      ></el-cascader>
</el-tooltip>
</template>
<script>
export default {
data() {
    return {
	      tooltipValue: "", // 存放选中回显
	      selectedVal:[], // 选中节点
	      optionsList:[{lable:'测试',value:'1',children:[{label:'第二层',value:'2'}]}]
	 }
},
methods: {
    changeEvent() {
      const selectedNodes =  this.$refs.cascaderRef.getCheckedNodes(); // 通过ref获取选中节点
      if (selectedNodes.length && selectedNodes[0]) {
      	//该列子做的是级联单选,所以只需要拿第一个节点,然后获取节点的pathLabels,就是它的完整选中内容
           this.tooltipValue = selectedNodes[0].pathLabels.join("/");
       }
     },
}
}
</script>

有默认值时,通过watch事件去获取tooltip展示内容,如下:

// 用el-tooltip包裹el-cascader,自定义tooltipValue存放选中节点的内容
<template>
<el-tooltip placement="bottom-start" :content="tooltipValue" :disabled="!tooltipValue">
     <el-cascader
        ref="cascaderRef"
        v-model="selectedVal"
        :options="optionsList"
      ></el-cascader>
</el-tooltip>
</template>
<script>
export default {
data() {
    return {
	      tooltipValue: "", // 存放选中回显
	      selectedVal:[], // 选中节点
	      optionsList:[{lable:'测试',value:'1',children:[{label:'第二层',value:'2'}]}]
	 }
},
watch: {
    selectedVal: {
      handler(val) {
        if (val && val.length > 0) {
          this.$nextTick(() => {
            const selectedNodes =
              this.$refs.cascaderRef.getCheckedNodes(true);
            if (selectedNodes.length && selectedNodes[0]) {
              this.tooltipValue = selectedNodes[0].pathLabels.join("/");
            }
          });
        } else {
          this.tooltipValue = "";
        }
      },
      immediate: true,
    },
  },
  mounted:{
  	this.init()
  },
  methods: {
    init() {
    // 有些需求需要调用接口默认选中节点,这里用setTimeout模拟
     setTimeout(()=>{
     	this.selectedVal = ['1','2']
     },1000)
     },
}
}
</script>