<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在data中定義普通陣列
data:{ list:[1,2,3,4,5,6] }
在html中使用 v-for 指令渲染
<p v-for="(item,i) in list">--索引值--{{i}} --每一項--{{item}}</p>
在data中定義物件陣列
data:{ list:[1,2,3,4,5,6], listObj:[ {id:1, name:'zs1'}, {id:2, name:'zs2'}, {id:3, name:'zs3'}, {id:4, name:'zs4'}, {id:5, name:'zs5'}, {id:6, name:'zs6'}, ] }
在html中使用 v-for 指令渲染
<p v-for="(user,i) in listObj">--id--{{user.id}} --姓名--{{user.name}}</p>
在data中定義物件
data:{ user:{ id:1, name:'託尼.賈', gender:'男' } }
在html中使用 v-for 指令渲染
<p v-for="(val,key) in user">--鍵是--{{key}}--值是--{{val}}</p>
<!-- 注意:如果使用v-for迭代數位的話,前面 count 的值從 1 開始--> <p v-for="count in 10">這是第{{count}}次迴圈</p>
完整程式碼:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div id='app'> <!--v-for迴圈普通陣列--> <p v-for="(item,i) in list">--索引值--{{i}} --每一項--{{item}}</p> <br/> <!--v-for迴圈物件陣列--> <p v-for="(user,i) in listObj">--id--{{user.id}} --姓名--{{user.name}}</p> <br/> <!--注意,在遍歷物件的鍵值對的時候,除了有 val 和 key,在第三個位置還有一個索引--> <p v-for="(val,key) in user">--鍵是--{{key}} --值是--{{val}}</p> <br/> <!-- in 後面我們放過陣列、物件陣列、物件,還可以放數位--> <!-- 注意:如果使用v-for迭代數位的話,前面 count 的值從 1 開始--> <p v-for="count in 10">這是第{{count}}次迴圈</p> </div> </body> <script src="vue.min.js"></script> <script> var vm = new Vue({ el:'#app', data:{ list:[1,2,3,4,5,6], listObj:[ {id:1, name:'zs1'}, {id:2, name:'zs2'}, {id:3, name:'zs3'}, {id:4, name:'zs4'}, {id:5, name:'zs5'}, {id:6, name:'zs6'}, ], user:{ id:1, name:'託尼.賈', gender:'男' } } }); </script> </html>
截圖:
在vuejs中,v-for 的使用是比較常見的,它允許您在模板程式碼中編寫for迴圈。那麼在使用v-for的時候,可曾思考過使用這個指令的一些技巧嗎?
在介紹它的使用技巧之前,我先介紹下它的基本用法吧,在vue中v-for可以遍歷陣列、物件、字串,但是用的最多的還是遍歷陣列,基本方法如下:
<div id="app"> <ul> <li v-for='item in list'> {{ item.name }} </li> </ul> </div>
可能有些初學者在使用的過程中,不會考慮太多的使用技巧,直接遍歷定義在data中的資料,其實vue在設計的初衷,也考慮到了這個問題,如果頻繁使用data中的資料,可能會造成一些效能上的消耗,是相當不友好的。
在本篇文章中,我將介紹六種方法來使你的 v-for 程式碼更加精確,可預測和強大。
建議在遍歷資料的時候,都儘可能的加上key,設定一個惟一的鍵屬性,它可以確保元件以您期望的方式工作。有些時候,可能使用索引index也可以,但是在一些特定的場景下,比如多場景登入下,如果不使用key來標識當前使用的登入方式,那麼可能會造成資料的紊亂問題,如果資料量比較大, 頁面的資料更新時會造成渲染資料消耗很大的效能甚至出現不可預測的bug,如果我們對每個元素都有唯一的鍵參照,那麼我們就可以更好地準確地預測DOM將如何操作,就可以避免很多不必要的問題出現。
<div id="app"> <ul> <li v-for='item in list' :key='item.id'> {{ item.name }} </li> </ul> </div>
一個超級常見的錯誤是使用 v-if 來過濾 v-for 迴圈的資料。Vuejs優先考慮 v-for 而不是 v-if,這意味著元件將回圈遍歷每個元素,然後檢查 v-if 條件以確定是否應渲染。因此,實際上,無論條件是什麼,都將遍歷陣列。儘管這看起來很直觀,但它會導致一個巨大的效能問題
/*千萬不要這樣寫,切記切記*/ <div id="app"> <ul> <li v-for='item in list' :key='item.id' v-if="item.price<50" > {{ item.name }} </li> </ul> </div>
為避免上述問題,我們應該在遍歷模板中的資料之前對其進行過濾。有兩種非常相似的方法
首先,我們只需要設定一個計算屬性,為了獲得與之前的v-if相同的功能,程式碼應如下所示。
<div id="app"> <ul> <li v-for='item in underPrice' :key='item.id' > {{ item.name }} </li> </ul> </div>
<script> export default { data () { return { list: [] } }, computed: { underPrice: function () { return this.list.filter(item=> item.price < 50) } } } </script>
計算屬性是作為屬性使用的,並不是方法。使用computed,可以將資料做快取處理,在每次渲染資料的時候,會優先在快取在找該資料,如果有了直接從快取中取出渲染,如果沒有的話再重新獲取。這樣也大大的提高了效能。
或者可以使用方式來進行變數的篩選以及處理再做遍歷
<div id="app"> <ul> <li v-for='item in underPriceHandle(50)' :key='item.id' > {{ item.name }} </li> </ul> </div>
<script> export default { data () { return { list: [] } }, methods: { underPriceHandle: function (price) { return this.list.filter(item=> item.price < price) } } } </script>
儘管大多數情況下,v-for 用於遍歷陣列或物件,但在某些情況下,我們肯定只希望迴圈執行一定次數。
例如,假設我們正在為線上商店建立一個分頁系統,而我們只希望每頁顯示10個產品。使用一個變數來跟蹤當前的頁碼,我們可以像這樣處理分頁。
<ul> <li v-for='index in 10' :key='index'> {{ books[page * 10 + index] }} </li> </ul>
除了遍歷陣列和存取每個元素之外,我們還可以跟蹤每個項的索引。
為此,我們必須在專案後新增一個索引值,它非常簡單,可用於分頁,顯示列表索引,顯示排名等。
<ul> <li v-for='(item, index) in products' :key='item.id' > {{ index }}----{{ item.name }} </li> </ul>
我們也可以使用v-for輕鬆地遍歷物件的鍵值對。
與存取元素的索引類似,我們必須向迴圈中新增另一個值。如果我們用一個引數遍歷一個物件,我們將遍歷所有的項。
如果我們新增另一個引數,我們將獲得items 和 key,如果新增第三個,我們還可以存取 v-for 迴圈的索引。
<ul> <li v-for='(list, index) in lists' :key='list.id' > <span v-for='(item, key, index) in list' :key='key'> {{ item }} </span> </li> </ul>
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45