vue學習:v-for列表渲染
阿新 • • 發佈:2018-12-14
一、用 v-for 把一個數組對應為一組元素
我們用 v-for 指令根據一組陣列的選項列表進行渲染。v-for 指令需要使用 item in items 形式的特殊語法,items 是源資料陣列並且 item 是陣列元素迭代的別名。
<ul id="example-1">
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
var example1 = new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' } ] } })
在 v-for 塊中,我們擁有對父作用域屬性的完全訪問許可權。v-for 還支援一個可選的第二個引數為當前項的索引。
<ul id="example-2">
<li v-for="(item, index) in items">
{{ parentMessage }} - {{ index }} - {{ item.message }}
</li>
</ul>
var example2 = new Vue({ el: '#example-2', data: { parentMessage: 'Parent', items: [ { message: 'Foo' }, { message: 'Bar' } ] } })
你也可以用 of 替代 in 作為分隔符,因為它是最接近 JavaScript 迭代器的語法:
<div v-for="item of items"></div>
二、一個物件的v-for
你也可以用 v-for 通過一個物件的屬性來迭代。第一個引數是索引,第二個的引數為鍵名:第三個引數屬性值:
<ul id="v-for-object" class="demo"> <li v-for="value in object"> {{ index }}. {{ key }}: {{ value }} </ul>
new Vue({
el: '#v-for-object',
data: {
object: {
firstName: 'John',
lastName: 'Doe',
age: 30
}
}
})
結果如下:
三、v-for迭代整數
<div id="app">
<span v-for="n in 10">{{n}}</span>
</div>
new Vue({
el: '#app'
})
渲染後結果為1 2 3 4 5 6 7 8 9 10
四、v-for中的key
當 Vue.js 用 v-for 正在更新已渲染過的元素列表時,它預設用“就地複用”策略。如果資料項的順序被改變,Vue 將不會移動 DOM 元素來匹配資料項的順序, 而是簡單複用此處每個元素,並且確保它在特定索引下顯示已被渲染過的每個元素。這個類似 Vue 1.x 的 track-by="$index" 。
這個預設的模式是高效的,但是只適用於不依賴子元件狀態或臨時 DOM 狀態 (例如:表單輸入值) 的列表渲染輸出。
為了給 Vue 一個提示,以便它能跟蹤每個節點的身份,從而重用和重新排序現有元素,你需要為每項提供一個唯一 key 屬性。理想的 key 值是每項都有的唯一 id。這個特殊的屬性相當於 Vue 1.x 的 track-by ,但它的工作方式類似於一個屬性,所以你需要用 v-bind 來繫結動態值 (在這裡使用簡寫):
<div v-for="item in items" :key="item.id">
<!-- 內容 -->
</div>
建議儘可能在使用 v-for 時提供 key,除非遍歷輸出的 DOM 內容非常簡單,或者是刻意依賴預設行為以獲取效能上的提升。