换成v-show即可解决

前端电脑端架构师
思考过程
我来重新分析这个问题。让我先查看当前的代码状态,确认问题所在。
src\views\institutions\elderlyInstitution\institutionalSecurity\components\tempTaskFeedback.vue
Thought
我理解了,问题在于 v-if 和 :disabled 同时作用在同一个元素上时,由于 Vue 的渲染机制,可能导致 disabled 属性失效。
当 v-if 条件从 false 变为 true 时,元素会被重新创建。如果此时 dialogForm.status 的值还未被正确更新(比如异步请求还未完成), disabled 的初始状态可能会出现问题。
解决方案是将 v-if 改为 v-show ,这样元素始终存在于 DOM 中,只是根据条件显示或隐藏,避免元素重建时的状态同步问题。
tempTaskFeedback.vue
src\views\institutions\elderlyInstitution\institutionalSecurity\components\tempTaskFeedback.vue
+ 1 - 1
查看变更
Thought
已修复问题。
问题分析 :
当 v-if 条件从 false 变为 true 时(比如从"编辑"模式切换到"查看"模式),按钮元素会被 重新创建 。此时 dialogForm.status 可能还是上一次操作的旧值(比如 0 ),导致按钮初始化时 disabled 就是 false 。虽然异步请求完成后 dialogForm.status 会更新,但由于 Vue 的响应式机制和 v-if 的重建特性, disabled 属性可能无法正确响应后续的状态变化。
解决方案 :
将 v-if 改为 v-show :
- v-show 只是切换元素的 display 属性,元素始终存在于 DOM 中
- 这样可以避免元素重建时的状态同步问题, disabled 属性能正确响应 dialogForm.status 的变化
修改位置: tempTaskFeedback.vue:152 ,将 v-if 改为 v-show
