el-tree与el-popover配合使用避免事件冒泡

复制代码
  <el-tree ref="sceneTreeRef" :filter-node-method="filterNode" class="scene-layer-tree" show-checkbox
            node-key="nodeKey" :allow-drag="allowDragHandler" :allow-drop="allowDropHandler" @node-drop="handleDrop"
            :data="TreeData.list" draggable default-expand-all @check="check">
            <template #default="{ data }">
                <span :title="data.title" class="tree-item-title">
                    <i class="fal fa-folder-open" style="color: #f2cc7b; margin: 5px" v-if="data.type == 'group'"></i>
                    <!-- 可以选择用一个< span >将整个< el-popover >包起来,给span加 一个 @click.stop,即可阻止冒泡 -->
                    <span @click.stop>
                        <el-popover placement="top" :width="200" trigger="click" class="propovers">
                            <template #reference>
                                <i class="fal fa-cog icon-setting"></i>
                            </template>
                            <template #default>
                                <div class="edit-item" v-if="data.type != 'root'" @click=editLayer(data)>
                                    <i class="fal fa-edit"></i>
                                    <span>{{ $t("x_edit") }}</span>
                                </div>
                                <div class="edit-item" v-if="data.type == 'group' || data.type == 'root'"
                                    @click="addNewLayer(data)">
                                    <i class="fal fa-layer-plus"></i>
                                    <span>{{ $t("x_add_a_new_layer") }}</span>
                                </div>
                                <div class="edit-item" v-if="data.type == 'group' || data.type == 'root'"
                                    @click="addFolder(data)">
                                    <i class="fal fa-folder-plus"></i>
                                    <span>{{ $t("x_add_folders") }}</span>
                                </div>
                                <div class="edit-item" v-if="data.type != 'root'" @click="deleteLayerFromTree(data)">
                                    <i class="fal fa-trash-alt"></i>
                                    <span>{{ $t("x_delete") }}</span>
                                </div>
                            </template>
                        </el-popover>
                    </span>
                    {{ data.title }}
                </span>
            </template>
        </el-tree>

解决方法: 可以选择用一个< span >将整个< el-popover >包起来,给span加 一个 @click.stop,即可阻止冒泡

相关推荐
LYFlied1 分钟前
单页应用与多页应用:架构选择与前端演进
前端·架构·spa·mpa·ssr
前端老宋Running3 分钟前
你的组件 API 为什么像个垃圾场?—— React 复合组件模式 (Compound Components) 实战教学
前端·react.js·架构
alanAltman4 分钟前
前端架构范式:意图系统构建web
前端·javascript
梦鱼6 分钟前
我踩了 72 小时的 Electron webview PDF 灰色坑,只为告诉你:别写这行代码!
前端·javascript·electron
ycgg7 分钟前
Webpack vs Vite 全方位对比:原理、配置、场景一次讲透
前端
百罹鸟7 分钟前
在langchain Next 项目中使用 shadcn/ui 的记录
前端·css·人工智能
华仔啊10 分钟前
Vue3和Vue2的核心区别?很多开发者都没完全搞懂的10个细节
前端·vue.js
亭上秋和景清16 分钟前
指针进阶: 回调函数
开发语言·前端·javascript
Mintopia16 分钟前
🌐 开源社区在 WebAIGC 技术迭代中的推动作用与争议
前端·人工智能·aigc
前端小臻18 分钟前
react中的函数组件和类组件(快捷指令和区别)
前端·react.js·前端框架