欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中v-for循環(huán)數(shù)組,在方法中splice刪除數(shù)組元素踩坑記錄

 更新時間:2023年06月27日 09:57:18   作者:壞丶毛病  
這篇文章主要介紹了vue中v-for循環(huán)數(shù)組,在方法中splice刪除數(shù)組元素踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue v-for循環(huán)數(shù)組,在方法中splice刪除數(shù)組元素

之前博客記錄過普通for循環(huán)中,針對對應符合條件的元素,使用splice刪除導致出現(xiàn)的問題

附上博客地址:js數(shù)組splice刪除某個元素爬坑

這里填一下在vue中v-for中使用splice刪除元素的坑。

眾所周知,我們使用v-for循環(huán)dom/組件,它有兩個屬性,item:當前循環(huán)的每一個元素,index:當前循環(huán)元素所對應的下標

個人習慣,平時綁定key值的時候,都習慣采用如下寫法,直接綁定下標

<div v-else class="checkCavans" v-for="(item,index) in cavansArr" :key="index">
    <rd-video
        :cameraName="item.name"
        :id="item.id"
        :url="item.rtmp"
        :isFull="isFull"
        :isShowFullBtn="true"
        :isAutoPlay="false"
        :isOpenFlash="isOpenFlash"
        ref="rdVideo"
        @playerStateChange="playerStateChange"
    ></rd-video>
    <img 
        src="../../../static/images/videoSurveillanceClose.png"
        alt=""
        @click="closeVideo(item)"
    />
</div>

在圖片(關閉圖標)綁定的事件中,我們關閉當前的視頻(銷毀:數(shù)據(jù)驅(qū)動,直接改變數(shù)組即可)

closeVideo(currData) {
    console.log('rd: closeVideo -> item', currData);
	const index = this.cavansArr.findIndex(item => item.id === currData.id);
	this.cavansArr.splice(index, 1);
},

這里采取的是把當前數(shù)據(jù)當做參數(shù)傳入事件中,然后通過findIndex找到數(shù)組中和當前數(shù)據(jù)id匹配的元素的下標,然后在數(shù)組中刪除這條數(shù)據(jù)即可。

但是因為我們綁定key值采取的是index,我們這邊刪除元素會導致順序錯亂問題,并不會以我們期望的那樣,點擊第一條就會刪除第一條。

查看vue官網(wǎng)對于key的介紹,最終找到了問題。

這里通俗的解釋下:

下標在這是個臨時身份,它的默認位置不會變化,如果你里面的item項移動了,那么移動的數(shù)據(jù)對應到index上,所以你的index對應的那個項就不是你想要的那個項了

所以本質(zhì)上 :key=index 它們是同一個inedx 在不變化的前提下,一旦發(fā)生變化了,就不再是我們期望的那樣了

所以這也是官方不推薦使用:key="index"的原因,如果業(yè)務發(fā)生變化,你的代碼就出問題了

我們改造下代碼,其他地方都可以不變,只需修改對于的key值即可

<div v-else class="checkCavans" v-for="item in cavansArr" :key="item.id">
    <rd-video
        :cameraName="item.name"
        :id="item.id"
        :url="item.rtmp"
        :isFull="isFull"
        :isShowFullBtn="true"
        :isAutoPlay="false"
        :isOpenFlash="isOpenFlash"
        ref="rdVideo"
        @playerStateChange="playerStateChange"
    ></rd-video>
    <img 
        src="../../../static/images/videoSurveillanceClose.png"
        alt=""
        @click="closeVideo(item)"
    />
</div>

這里我們綁定循環(huán)的每一項item中的一個唯一屬性id(其他屬性有可能出現(xiàn)從重復的情況,不一定綁定id屬性,綁定任何屬性都可,但是不管什么屬性,保證其唯一性)

這樣我們再使用splice時就不會出現(xiàn)這種錯亂的問題了。

以上就是針對vue中使用v-for循環(huán)數(shù)組,在事件中操作數(shù)組元素(刪除等)導致出現(xiàn)的問題。

js vue v-for循環(huán)刪除數(shù)組項(刪不干凈的問題)

重點在與a -= 1,要讓a隨著被截取后數(shù)組長度的變化而變化,截取一個,a少一次。

let val = this.childData.chackNumber
? ? ? for (let a = 0; a < val.length; a++) {?
? ? ? ? if (val[a].chack == false) {
? ? ? ? ? val.splice(a,1)
? ? ? ? ? a -= 1 ? //每刪除一個項就讓a減少一個 保持a和長度同步
? ? ? ? }
? ? ? }

數(shù)據(jù)結構如下:

chackNumber: [
? ? ? ? ? {?
? ? ? ? ? ? floorID:true,
? ? ? ? ? ? chack: true,
? ? ? ? ? ? name: "[01]"
? ? ? ? ? },
? ? ? ? ? {
? ? ? ? ? ? floorID:false,
? ? ? ? ? ? chack: false,
? ? ? ? ? ? name: "[02]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:false,
? ? ? ? ? ? chack: false,
? ? ? ? ? ? name: "[03]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:false,
? ? ? ? ? ? chack: false,
? ? ? ? ? ? name: "[04]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:true,
? ? ? ? ? ? chack: true,
? ? ? ? ? ? name: "[05]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:false,
? ? ? ? ? ? chack: false,
? ? ? ? ? ? name: "[06]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:true,
? ? ? ? ? ? chack: true,
? ? ? ? ? ? name: "[07]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:false,
? ? ? ? ? ? chack: false,
? ? ? ? ? ? name: "[08]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:true,
? ? ? ? ? ? chack: true,
? ? ? ? ? ? name: "[09]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:true,
? ? ? ? ? ? chack: true,
? ? ? ? ? ? name: "[10]"
? ? ? ? ? },
? ? ? ? ? {?
? ? ? ? ? ? floorID:false,
? ? ? ? ? ? chack: false,
? ? ? ? ? ? name: "[11]"
? ? ? ? ? }
? ? ? ? ]

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Vue3利用自定義指令進行內(nèi)容控制的實現(xiàn)方法

    Vue3利用自定義指令進行內(nèi)容控制的實現(xiàn)方法

    Vue3作為一個漸進式JavaScript框架,提供了強大的自定義指令功能,使得權限控制變得既簡單又高效,本文將詳細介紹如何在Vue3中使用自定義指令來判斷內(nèi)容是否顯示,以滿足不同用戶權限下的界面展示需求,需要的朋友可以參考下
    2024-04-04
  • element如何初始化組件功能詳解

    element如何初始化組件功能詳解

    Element UI是一套基于Vue的桌面端組件庫,封裝好了很多常用的UI組件,下面這篇文章主要給大家介紹了關于element如何初始化組件功能的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 如何修改element-ui中tree組件的icon圖標(小白都會的前端技能)

    如何修改element-ui中tree組件的icon圖標(小白都會的前端技能)

    這篇文章主要給大家介紹了關于如何修改element-ui中tree組件的icon圖標的相關資料,本文介紹的是小白都會的前端技能,文中通過代碼以及圖文介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 解決Ant Design Modal內(nèi)嵌Form表單initialValue值不動態(tài)更新問題

    解決Ant Design Modal內(nèi)嵌Form表單initialValue值不動態(tài)更新問題

    這篇文章主要介紹了解決Ant Design Modal內(nèi)嵌Form表單initialValue值不動態(tài)更新問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue3編寫帶提示的表格組件功能

    vue3編寫帶提示的表格組件功能

    本文介紹了如何使用Vue 3編寫一個帶提示的表格組件,并假設每行都有一個保存按鈕,如果需要全部保存,還會加上驗證,感興趣的朋友一起看看吧
    2025-02-02
  • vue常見的通信方式總結

    vue常見的通信方式總結

    我們?nèi)粘m椖块_發(fā)中,少不了組件之間的通信,我們可能只知道一些常見的方式比如props,emits,其實,實現(xiàn)組件間的通信有很多種方式,本文就給大家總結一些我們常見的通信方式,需要的朋友可以參考下
    2023-08-08
  • 在nuxt使用vueX代替storage的實現(xiàn)方案

    在nuxt使用vueX代替storage的實現(xiàn)方案

    這篇文章主要介紹了在nuxt使用vueX代替storage的實現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vite打包優(yōu)化之縮小打包體積實現(xiàn)詳解

    Vite打包優(yōu)化之縮小打包體積實現(xiàn)詳解

    這篇文章主要為大家介紹了使用Vite縮小打包體積如何實現(xiàn)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Vue配置環(huán)境變量的正確打開方式

    Vue配置環(huán)境變量的正確打開方式

    這篇文章主要為大家介紹了Vue配置環(huán)境變量,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 理順8個版本vue的區(qū)別(小結)

    理順8個版本vue的區(qū)別(小結)

    這篇文章主要介紹了理順8個版本vue的區(qū)別(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論