搜索

📄 文章 📚 合集
热门搜索
🐘 PHP ⚡ Laravel 🎨 Vue.js ⚛️ React 📦 Yii 📘 JavaScript 🗄️ MySQL 🐳 Docker
返回合集

[板块x:修复bug] - 10- 修复删除组件后属性面板残留问题

代码示例
# 修复删除组件后属性面板仍显示该组件内容的问题

## 1。问题描述

在可视化拖拽编辑器中,删除画布上的某个组件后,右侧属性面板仍然显示该已删除组件的属性内容,而不是清空或显示「点击组件编辑属性」的提示。

## 2。原因分析

删除组件时,`componentStore.deleteComponent()` 方法只更新了 `components` 列表(画布数据),但没有同步清空 `selectedComponent` 和 `selectedId` 这两个选中状态变量。导致删除后,属性面板仍引用已被删除的组件对象。

## 3。解决方案

### 3.1 修改 `useComponentStore`,让 `deleteComponent` 返回被删除的组件 ID

**文件**:`resources/js/admin/stores/component.ts`

**修改前**:

```typescript
const deleteComponent = async (id: number) => {
    loading.value = true;
    try {
        await componentApi.delete(id);
        components.value = components.value.filter(c => c.id !== id);
        ElMessage.success('删除成功');
    } catch (error) {
        ElMessage.error('删除失败');
        throw error;
    } finally {
        loading.value = false;
    }
};
```

**修改后**:

```typescript
const deleteComponent = async (id: number): Promise<number> => {
    loading.value = true;
    try {
        await componentApi.delete(id);
        components.value = components.value.filter(c => c.id !== id);
        ElMessage.success('删除成功');
        return id;  // 返回被删除的组件 ID
    } catch (error) {
        ElMessage.error('删除失败');
        throw error;
    } finally {
        loading.value = false;
    }
};
```

### 3.2 修改 `PageEditor.vue`,在删除回调中清空选中状态

**文件**:`resources/js/admin/views/PageEditor.vue`

**删除按钮模板**:

```vue
<el-button type="danger" link size="small" @click.stop="handleDeleteComponent(comp)">
    删除
</el-button>
```

**新增删除处理方法**:

```typescript
// 删除组件(并清空选中状态)
const handleDeleteComponent = async (comp: any) => {
    const deletedId = await componentStore.deleteComponent(comp.id);
    // 如果删除的是当前选中的组件,清空选中状态
    if (selectedId.value === deletedId) {
        selectedComponent.value = null;
        selectedId.value = null;
    }
};
```

## 4。修改文件清单

| 文件 | 操作 | 说明 |
|------|------|------|
| `resources/js/admin/stores/component.ts` | 修改 | `deleteComponent` 返回被删除的组件 ID |
| `resources/js/admin/views/PageEditor.vue` | 修改 | 新增 `handleDeleteComponent` 方法,删除后清空选中状态 |

## 5。验证结果

| 验证项 | 预期结果 | 实际结果 |
|--------|---------|---------|
| 删除组件后属性面板 | 显示「点击组件编辑属性」或清空 | ✅ |
| 删除非选中组件 | 选中状态保持不变 | ✅ |
| 删除选中组件 | 选中状态被清空,属性面板不再显示旧内容 | ✅ |

🧸 adorable code

专注 PHP、JavaScript、Laravel、Vue.js、React、Yii 全栈开发。记录技术探索过程中的灵感与经验,分享工程实践洞见。

hello@adorablecode.com