vue-draggable-resizable 搭配vue2 如何选中状态保持 我选中组件后 点击右侧编辑栏区域 依旧保持它选中状态 点击其他非组件区域取消选中
16条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在Vue.js项目中使用
vue-draggable-resizable
组件并希望实现选中状态保持的功能,即选中一个组件后,点击右侧编辑栏区域时仍保持其选中状态,而点击其他非组件区域时取消选中,可以按照以下步骤进行配置和编码:-
设置全局/局部状态管理: 创建一个Vue实例的数据属性(如
selectedComponentId
)来存储当前选中的组件ID。这样可以方便地在组件间共享和更新选中状态。// 在您的Vue实例(例如App.vue)中添加如下数据属性 data() { return { selectedComponentId: null, }; }
-
给组件添加唯一标识: 给每个
vue-draggable-resizable
组件添加一个唯一的标识(如componentId
),以便与selectedComponentId
进行匹配。<vue-draggable-resizable :componentId="uniqueComponentId" ... ></vue-draggable-resizable>
其中,
uniqueComponentId
是您为每个组件生成的唯一ID。 -
处理点击事件: 为
vue-draggable-resizable
组件添加@click
事件监听器,当点击组件时,将其ID赋值给selectedComponentId
。<vue-draggable-resizable :componentId="uniqueComponentId" @click="onComponentClick(uniqueComponentId)" ... ></vue-draggable-resizable> <div class="edit-panel" @click="onEditPanelClick"></div> <!-- 在methods中定义事件处理函数 --> methods: { onComponentClick(componentId) { this.selectedComponentId = componentId; }, onEditPanelClick() { // 当点击编辑面板时,不做任何操作,维持选中状态 }, },
-
处理非组件区域点击事件: 在包含所有组件的最外层容器(或页面根元素)上添加一个点击事件监听器,用于清除
selectedComponentId
,从而取消选中状态。同时,需确保这个监听器不会覆盖到组件自身的点击事件。<div class="workspace" @click="onWorkspaceClick"> <!-- vue-draggable-resizable 组件和其他组件放在这里 --> </div> <!-- 在methods中定义事件处理函数 --> methods: { ..., onWorkspaceClick(event) { // 阻止事件冒泡,防止触发子组件的click事件 event.stopPropagation(); // 获取点击目标是否为组件 const isComponentClicked = event.target.closest('.draggable-resizable-component'); if (!isComponentClicked) { this.selectedComponentId = null; // 清除选中状态 } }, },
-
根据选中状态应用样式: 根据
selectedComponentId
与componentId
的匹配情况,为选中的vue-draggable-resizable
组件添加相应的选中样式。<vue-draggable-resizable :componentId="uniqueComponentId" :class="{ 'selected': uniqueComponentId === selectedComponentId }" ... ></vue-draggable-resizable> <!-- 在CSS中定义选中样式 --> .selected { border-color: #007BFF; box-shadow: 0 0 0 2px rgba(0, 123, 255, 0..png); /* 其他选中样式 */ }
按照以上步骤,您的
vue-draggable-resizable
组件搭配Vue2项目将实现选中状态保持功能:选中一个组件后,点击右侧编辑栏区域时仍保持其选中状态;点击其他非组件区域时取消选中。解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥15 cmd cl 0x000007b
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
- ¥500 火焰左右视图、视差(基于双目相机)