vue element-ui el-tooltip组件失效问题及解决
作者:ygrhlh
vue element-ui el-tooltip组件失效
起因
因为公司项目年代久远以及谷歌chrome 80 后的samesite问题,所以在开发阶段使用Firefox来查看效果
项目上到测试环境之后,我这边使用Firefox查看效果是没有问题的,tooltip组件正式显示
但是当测试使用Chrome的时候,tooltip组件没有显示,审查元素也发现没有相应的tooltip的html元素出现,正常来讲应该是要出现类似以下的html元素的
最后经过大量百度(bushi) 以及查阅github的issue之后得出:
当el-tooltip组件内直接放置文本或者单一元素的时候,在Chrome会有tooltip不出现的问题,在Firefox却不会
<template> <!-- 直接放置文本 --> <el-tooltip class="item" effect="dark" content="tooptip" placement="top-start"> 直接放置文本 </el-tooltip> <!-- 单一元素 --> <el-tooltip class="item" effect="dark" content="tooptip" placement="top-start"> <textarea v-model="value" @change="updata"></textarea> </el-tooltip> </template>
尝试解决
但是如果你用一个盒子去包裹的话,它又可以了!!!
<template> <el-tooltip class="item" effect="dark" content="tooptip" placement="top-start"> <p>用一个p标签包裹文本</p> </el-tooltip> <el-tooltip class="item" effect="dark" content="tooptip" placement="top-start"> <div> <textarea v-model="value" @change="updata"></textarea> </div> </el-tooltip> </template>
心得
在使用el-tooptip组件时应该始终用一个盒子去包裹住里面的元素
vue element-ui 使用el-tooltip内部嵌套其他element-ui组件时报错
现象:
[Vue warn]: Error in mounted hook: "TypeError: Cannot read properties of undefined (reading 'style')"
found in
---> <ElSwitch> at packages/switch/src/component.vue
<ElTooltip>
<ElDialog> at packages/dialog/src/component.vue
<OffSeasonStorage>
<CustomizationDetails> at src/views/equipment/components/Customization.vue
<AppMain> at src/layout/components/AppMain.vue
<Layout> at src/layout/index.vue
<App> at src/App.vue
<Root>
warn @ vue.runtime.esm.js?2b0e:619
vue.runtime.esm.js?2b0e:1897 TypeError: Cannot read properties of undefined (reading 'style')
at VueComponent.setBackgroundColor (element-ui.common.js?5c96:7289:1)
at VueComponent.mounted (element-ui.common.js?5c96:7314:1)
at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1863:1)
at callHook (vue.runtime.esm.js?2b0e:4235:1)
at Object.insert (vue.runtime.esm.js?2b0e:3158:1)
at invokeInsertHook (vue.runtime.esm.js?2b0e:6390:1)
at VueComponent.patch [as __patch__] (vue.runtime.esm.js?2b0e:6609:1)
at Vue._update (vue.runtime.esm.js?2b0e:3963:1)
at VueComponent.updateComponent (vue.runtime.esm.js?2b0e:4081:1)
at Watcher.get (vue.runtime.esm.js?2b0e:4495:1)
logError @ vue.runtime.esm.js?2b0e:1897
代码:
<el-dialog :visible.sync="dialogVisible" :close-on-click-modal="false" :destroy-on-close="true" :before-close="closeFunc" :lock-scroll="false" :append-to-body="true" top="" > <el-tooltip v-model="item.tooltip" effect="dark" :manual="true" placement="left"> <div slot="content"> <div> <div>tips</div> </div> </div> <div> <el-switch v-model="item.switch" class="switch" :width="60" active-color="#AE0F0A" inactive-color="#DDDDDD" @change="switchChangeFuc(item)" > </el-switch> </div> </el-tooltip> </el-dialog>
解决方案
根据dialog的展示与否重新渲染el-switch
<el-switch v-if="dialogVisible" v-model="item.switch" class="switch" :width="60" active-color="#AE0F0A" inactive-color="#DDDDDD" @change="switchChangeFuc(item)" > </el-switch>
结果:问题解决
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。