網站首頁 編程語言 正文
場景描述
? ? ? ?在實際業務場景中,我們可能需要動態循環生成多個form表單(并且有表單校驗),而每個form表單中又可能需要動態控制某一項item的顯示隱藏,在我的實際工作中,控制表單的顯示隱藏時,多使用的v-if,而此時表單校驗會呈現出校驗失效、未觸發的情況。
<div v-for="(item,index) in imgAndContent.formList" :key="item.key" class="content-element-item">
<el-form :rules="rules" :ref="'form'+ item.key" :model="item.form" label-width="180px">
<el-form-item label="類型">
<el-select v-model="item.form.contentType" @change="handleChangeType(item.form,index)" placeholder="請選擇類型">
<el-option label="文字" :value="'0'"></el-option>
<el-option label="圖片" :value="'1'"></el-option>
</el-select>
</el-form-item>
<!-- 1、文字類型 -->
<el-form-item :key="item.key+'content'" v-if="item.form.contentType==='0'" label="內容" prop="content">
<el-input v-model="item.form.content" @change="setContentLocation(item.form,index,item.key)" placeholder="請輸入內容"></el-input>
</el-form-item>
<!-- 2、圖片類型 -->
<el-form-item :key="item.key+'contentImgUrl'" v-if="item.form.contentType==='1'" label="圖片地址" prop="contentImgUrl">
<el-input v-model="item.form.contentImgUrl" @change="setContentLocation(item.form,index,item.key)" placeholder="請輸入內容"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="delContentConfig(index)">刪除</el-button>
</el-form-item>
</el-form>
</div>
原因
? ? ? ? 眾所周知,vue響應式的實現中,除了Object.defineProperty外,還有一個非常重要的東西存在——diff算法,diff算法在工作的過程中會通過key進行快速的對比,查找出不同的節點,判斷其是否需要被重新渲染。一旦vue認為dom節點沒有變化它就不會重新進行渲染,而是復用了節點。而上面場景中,雖然我們循環的form添加了key,但是內部動態變化的form-item被認為是同一個了(因為每個form中都有這個變化的form-item),所以在控制顯示隱藏時,vue將其他form中的item復用到了正在操作的表單上,因此會出現表單校驗失效的情況
解決
? ? ? ? 給每一個動態顯示隱藏的元素添加唯一的key,可以是for循環的key+name
?
原文鏈接:https://blog.csdn.net/m0_47135993/article/details/121765609
相關推薦
- 2022-08-15 Spring框架常考知識點總結
- 2022-04-03 帶你理解C語言中的漢諾塔公式_C 語言
- 2021-12-09 VS2017開發C語言出現“no_init_all“的解決辦法_C 語言
- 2022-10-15 Qt實現簡單UDP通信_C 語言
- 2022-11-26 使用HttpClient增刪改查ASP.NET?Web?API服務_實用技巧
- 2022-07-07 C++?opencv實現幾何圖形繪制_C 語言
- 2022-09-13 GO語言包管理工具go?mod以及包詳解_Golang
- 2023-07-28 async await 寫法
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支