el-popover中嵌套使用el-select展开时自动关闭的解决方法

el-popover中嵌套使用el- select,当鼠标移除el-popover一秒后关闭el-popover。
1、el-popover使用手动模式

<el-popover trigger="manual" v-model="visible">
	<div ref="popoverRef">
		<el-select v-model="value1"></el-select>
		<el-select v-model="value2"></el-select>
	</div>
	<el-button slot="reference" @click="visible=!visible"></el-button>
</el-popover>
// javascript
this.$refs.popoverRef.addEventListener('mouseleave', (e) => {
	this.time = 0;
	setTimeout(() => {
		++this.time;
		if (this.time == 1) {
			this.visible = false;
		}
	}, 1000)
})

这里会出现一个问题!el-select选项展开的时候它是插入body的,所以选择选项的时候会移除popoverRef的范围
这里我加了一个字段判断select是否打开,通过select的visible-change的值来修改

	<el-select v-model="value1"  @visible-change="selectStateChange"></el-select>
	// javascript
	selectStateChange (val) {
   	  this.selectOpen = val;
   },

当鼠标快速移出再移入的时候则需要取消计时。
完整的代码如下:

<el-popover trigger="manual" v-model="visible" @show="onShowPopover" @hide="onHidePopover">
   <div ref="popoverRef">
   	<el-select v-model="value1" @visible-change="selectStateChange"></el-select>
   	<el-select v-model="value2" @visible-change="selectStateChange"></el-select>
   </div>
   <el-button slot="reference" @click="visible=!visible"></el-button>
</el-popover>
// javascript
onShowPopover () {
   this.$refs.popoverRef.addEventListener('mouseleave', (e) => {
   	this.time = 0;
   	this.timeOut = setTimeout(() => {
   		++this.time;
   		if (this.time == 1 && !this.selectOpen && !this.inPoPover) {
   			this.visible = false;
   		}
   	}, 1000)
   })
   this.$refs.popoverRef.addEventListener('mouseenter', (e) => {
   	this.inPoPover = true;
   })
}
onHidePopover () {
   clearTimeout(this.timeOut);
}
selectStateChange (val) {
    this.selectOpen = val;
},
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值