網(wǎng)站首頁 編程語言 正文
場景描述
? ? ? ?在實際業(yè)務(wù)場景中,我們可能需要動態(tài)循環(huán)生成多個form表單(并且有表單校驗),而每個form表單中又可能需要動態(tài)控制某一項item的顯示隱藏,在我的實際工作中,控制表單的顯示隱藏時,多使用的v-if,而此時表單校驗會呈現(xiàn)出校驗失效、未觸發(fā)的情況。
<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="內(nèi)容" prop="content">
<el-input v-model="item.form.content" @change="setContentLocation(item.form,index,item.key)" placeholder="請輸入內(nèi)容"></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="請輸入內(nèi)容"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="delContentConfig(index)">刪除</el-button>
</el-form-item>
</el-form>
</div>
原因
? ? ? ? 眾所周知,vue響應(yīng)式的實現(xiàn)中,除了Object.defineProperty外,還有一個非常重要的東西存在——diff算法,diff算法在工作的過程中會通過key進行快速的對比,查找出不同的節(jié)點,判斷其是否需要被重新渲染。一旦vue認為dom節(jié)點沒有變化它就不會重新進行渲染,而是復(fù)用了節(jié)點。而上面場景中,雖然我們循環(huán)的form添加了key,但是內(nèi)部動態(tài)變化的form-item被認為是同一個了(因為每個form中都有這個變化的form-item),所以在控制顯示隱藏時,vue將其他form中的item復(fù)用到了正在操作的表單上,因此會出現(xiàn)表單校驗失效的情況
解決
? ? ? ? 給每一個動態(tài)顯示隱藏的元素添加唯一的key,可以是for循環(huán)的key+name
?
原文鏈接:https://blog.csdn.net/m0_47135993/article/details/121765609
相關(guān)推薦
- 2022-05-13 Android 10 讀寫文件權(quán)限
- 2022-11-06 React?hook實現(xiàn)簡單的websocket封裝方式_React
- 2022-07-13 Android單選多選按鈕的使用方法_Android
- 2022-04-28 WPF路由事件中的三種策略介紹_實用技巧
- 2022-09-05 C語言深入淺出分析函數(shù)指針_C 語言
- 2022-02-24 Golang?strings包常用字符串操作函數(shù)_Golang
- 2022-05-10 ioc注解方式和xml方式混用
- 2022-10-02 C#利用FileSystemWatcher實時監(jiān)控文件的增加,修改,重命名和刪除_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支