代码中的关键状态分析 🔍
父组件 (fake-team-list.vue
)
export default class extends Vue {
// 🔴 关键状态1: 控制弹窗显示
private formVisible = false
// 🔴 关键状态2: 当前操作的行数据
private currentRow: any = null
// 🔴 关键状态3: 列表数据
private list: any[] = []
// 🔴 关键状态4: 分页参数
private listQuery = {
page: 1,
size: 10
}
}
子组件 (fake-team-form.vue
)
export default class extends Vue {
// 🔴 关键状态1: 表单数据模型
private form = {
id: undefined,
title: '',
description: '',
clueId: undefined,
stage: undefined,
countermeasure: ''
}
// 🔴 关键状态2: 线索列表选项
private clueList: any = []
// 🔴 关键状态3: 操作类型 (add/edit/view)
@Prop() private operateType!: string
}
状态丢失原理图解 🎯
关键状态详解表 📋
组件 | 状态变量 | 作用 | 是否会被 v-if 影响 |
---|---|---|---|
父组件 | formVisible | 控制子组件显示/隐藏 | ✅ 影响显示逻辑 |
父组件 | currentRow | 存储当前操作的行数据 | ✅ 决定传递的数据 |
子组件 | form | 存储表单数据 | ✅ 直接丢失 |
子组件 | clueList | 下拉选项数据 | ✅ 需要重新加载 |
子组件 | operateType | 控制表单操作模式 | ✅ 影响UI状态 |
解决方案验证 ✅
现象复现
当父组件使用 v-if
控制子组件时:
<!-- 父组件错误用法 -->
<fake-team-form
v-if="formVisible"
:form-data="currentRow"
/>
正确用法
<!-- 方法1: 使用 v-show -->
<fake-team-form
v-show="formVisible"
:form-data="currentRow"
/>
<!-- 方法2: 使用 keep-alive -->
<keep-alive>
<fake-team-form
v-if="formVisible"
:form-data="currentRow"
/>
</keep-alive>
状态管理流程图 🔄
通过理解这些状态的作用范围和 v-if
的影响机制,您就能精准定位数据丢失的根本原因! 🚀