Vue中的v-for列表循環(huán)示例詳解
前言
在電商項(xiàng)目的開發(fā)中,會(huì)用到這樣一個(gè)問題:商品的陳列我們?nèi)绻褂迷膉s會(huì)顯得十分臃腫。但是在Vue中,我們可以直接使用列表渲染來實(shí)現(xiàn)這樣的效果。
1. v-for
v-for指令用于渲染一個(gè)列表,它接受一個(gè)數(shù)組或者對(duì)象,然后使用一個(gè)模板來渲染每個(gè)元素。
v-for指令需要使用item in items的語法,其中items是源數(shù)據(jù)數(shù)組,而item則是被迭代的數(shù)組元素的別名。
在vue中,使用v-for指令不僅可以渲染數(shù)組,還可以渲染對(duì)象。當(dāng)使用v-for渲染對(duì)象時(shí),它會(huì)遍歷對(duì)象的屬性名。
1.1 數(shù)組
這里我們使用一個(gè)數(shù)組來渲染一個(gè)列表。
<div id="app"> <ul> <li v-for="item in items">{{item}}</li> </ul>
在上面我們寫了一個(gè)ul標(biāo)簽,然后使用v-for指令來渲染一個(gè)數(shù)組。這里我們使用了item in items的語法,其中items是源數(shù)據(jù)數(shù)組,而item則是被迭代的數(shù)組元素的別名。
var vm = new Vue({ el: '#app', data: { items: [ 11,22,33 ], } });
渲染結(jié)果:
當(dāng)然在使用v-for來遍歷數(shù)組的時(shí)候,還可以添加另外一個(gè)屬性。這里我們使用index作為數(shù)組的索引。
<div id="app"> <ul> <li v-for="(item,index) in items">{{index}}:{{item}}</li> </ul>
渲染結(jié)果:
tips:
記得兩個(gè)屬性之間要添加逗號(hào)。
1.2 對(duì)象
前面我們看了數(shù)組的渲染,那么我們也可以使用v-for來渲染對(duì)象。
<div id="app"> <ul> <li v-for="(value,key,index) in object">{{index}}:{{key}}:{{value}}</li> </ul>
var vm = new Vue({ el:'#app', data:{ obj:{ name:'張三', age:18, } }, });
結(jié)果如下:
在遍歷對(duì)象的時(shí)候,我們這里填寫了三個(gè)屬性,分別是value,key,index。其中value是對(duì)象的值,key是對(duì)象的鍵,index是索引。
通過結(jié)果也顯而易見。
2. v-for的key
在使用v-for來渲染列表的時(shí)候,我們需要為每一個(gè)節(jié)點(diǎn)添加一個(gè)唯一的key屬性。這樣做的好處是可以提高渲染的效率。
眾所周知,在vue中有一個(gè)虛擬dom,通過虛擬dom可以極大的提高渲染的效率。當(dāng)我們使用v-for來渲染一個(gè)列表的時(shí)候,vue會(huì)根據(jù)key來判斷節(jié)點(diǎn)是否需要更新。如果key不變,那么vue會(huì)復(fù)用節(jié)點(diǎn),如果key變了,那么vue會(huì)重新渲染節(jié)點(diǎn)。
也就是說,如果我們需要給對(duì)象或者數(shù)組添加/刪除元素,vue會(huì)先比較哪些元素變了,哪些元素沒變。變了的元素,dom才會(huì)更新,沒有發(fā)生改變的,dom就直接拿過來使用。這樣就極大的提高了渲染的效率。
補(bǔ)充:v-for中key屬性的意義
舉個(gè)例子如 <li v-for="(item,index) in anime" :key="item">{{index+1}}-{{item}}</li> 或者 <td v-for="(value,name,index) of obj" :key="index"> 武器 {{value}} <br>人物 {{name}} <br>排名 {{index}} </td>
v-for遍歷對(duì)象,這里的key是個(gè)形參,它指的是對(duì)象里的屬性名,可以是id,name或者什么
而其他時(shí)候,在我們使用v-for時(shí),建議給對(duì)應(yīng)的元素或組件添加一個(gè)key屬性
主要是為了更加高效的更新虛擬DOM,便于diff算法
假設(shè)要在一個(gè)節(jié)點(diǎn)列表abcde的bc之間插入一個(gè)新節(jié)點(diǎn)f,在添加key屬性前,算法默認(rèn)是將c更新成f,d更新成c,e更新成d,最后再插入e,這樣是幾步?大家可以數(shù)一下
而在添加key屬性后,key為每一個(gè)節(jié)點(diǎn)做了一個(gè)標(biāo)識(shí),算法可以準(zhǔn)確高效的在要求的位置插入新節(jié)點(diǎn),也就不會(huì)再那樣一次更新消耗資源了
官方的解釋:key屬性主要用在Vue的虛擬DOM算法,在新舊nodes對(duì)比時(shí)辨識(shí)VNodes;
如果不使用key,Vue會(huì)使用一種最大限度減少動(dòng)態(tài)元素并且盡可能的嘗試就地修改/復(fù)用相同類型元素的算法;
而使用key時(shí),它會(huì)基于key的變化重新排列元素順序,并且會(huì)移除/銷毀key不存在的元素;
詳細(xì)來說,我們知道,vue實(shí)現(xiàn)了一套虛擬DOM,使我們可以不直接操作DOM元素,只操作數(shù)據(jù)便可以重新渲染頁面。而隱藏在背后的原理便是其高效的Diff算法。
總結(jié)
到此這篇關(guān)于Vue中的v-for列表循環(huán)的文章就介紹到這了,更多相關(guān)Vue v-for列表循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue動(dòng)態(tài)組件實(shí)現(xiàn)選項(xiàng)卡切換效果
這篇文章主要為大家詳細(xì)介紹了vue動(dòng)態(tài)組件實(shí)現(xiàn)選項(xiàng)卡切換效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03vue 跳轉(zhuǎn)到其他頁面并關(guān)閉當(dāng)前頁面的實(shí)現(xiàn)代碼
我在做一個(gè)調(diào)用虛擬機(jī)錄屏的一個(gè)操作,需要在瀏覽器頁面上,點(diǎn)擊按鈕后,關(guān)閉當(dāng)前頁面里的某一個(gè)頁面,并且打開瀏覽器新頁面是虛擬機(jī)的頁面,本文給大家介紹vue 跳轉(zhuǎn)到其他頁面并關(guān)閉當(dāng)前頁面的實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧2023-09-09關(guān)于el-table表格組件中插槽scope.row的使用方式
這篇文章主要介紹了關(guān)于el-table表格組件中插槽scope.row的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue使用webSocket更新實(shí)時(shí)天氣的方法
本文將結(jié)合實(shí)例代碼,介紹vue使用webSocket更新實(shí)時(shí)天氣的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Element-UI實(shí)現(xiàn)復(fù)雜table表格結(jié)構(gòu)的操作代碼
Element-UI組件el-table用于展示多條結(jié)構(gòu)類似的數(shù)據(jù),可對(duì)數(shù)據(jù)進(jìn)行排序、篩選、對(duì)比或其他自定義操作,本文給大家介紹Element-UI實(shí)現(xiàn)復(fù)雜table表格結(jié)構(gòu)的操作代碼,感興趣的朋友一起看看吧2023-12-12