最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue.js學(xué)習(xí)教程之列表渲染詳解

 更新時(shí)間:2017年05月17日 15:10:18   作者:jiangxiaobo  
這篇文章主要給大家介紹了關(guān)于Vue.js列表渲染的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。

本文主要給大家介紹了關(guān)于Vue.js列表渲染的相關(guān)資料,分享出來(lái)給大家參考學(xué)習(xí),下面來(lái)看看詳細(xì)的介紹:

v-for

可以使用 v-for 指令基于一個(gè)數(shù)組渲染一個(gè)列表。這個(gè)指令使用特殊的語(yǔ)法,形式為item in items,items 是數(shù)據(jù)數(shù)組,item 是當(dāng)前數(shù)組元素的別名:

示例:

<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 塊內(nèi)我們能完全訪問(wèn)父組件作用域內(nèi)的屬性,另有一個(gè)特殊變量 $index,正如你猜到的,它是當(dāng)前數(shù)組元素的索引:

<ul id="example-2">
 <li v-for="item in items">
 {{ parentMessage }} - {{ $index }} - {{ item.message }}
 </li>
</ul>
var example2 = new Vue({
 el: '#example-2',
 data: {
 parentMessage: 'Parent',
 items: [
  { message: 'Foo' },
  { message: 'Bar' }
 ]
 }
})

另外,你可以為索引指定一個(gè)別名(如果 v-for 用于一個(gè)對(duì)象,則可以為對(duì)象的鍵指定一個(gè)別名):

<div v-for="(index, item) in items">
 {{ index }} {{ item.message }}
</div>

從 1.0.17 開(kāi)始可以使用 of 分隔符,更接近 JavaScript 遍歷器語(yǔ)法:

<div v-for="item of items"></div>

template v-for

類似于 template v-if,也可以將 v-for 用在 <template> 標(biāo)簽上,以渲染一個(gè)包含多個(gè)元素的塊。例如:

<ul>
 <template v-for="item in items">
 <li>{{ item.msg }}</li>
 <li class="divider"></li>
 </template>
</ul>

數(shù)組變動(dòng)檢測(cè)

變異方法

Vue.js 包裝了被觀察數(shù)組的變異方法,故它們能觸發(fā)視圖更新。

被包裝的方法有:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

你可以打開(kāi)瀏覽器的控制臺(tái),用這些方法修改上例的 items 數(shù)組。例如:example1.items.push({ message: 'Baz' }) 。

替換數(shù)組

變異方法,如名字所示,修改了原始數(shù)組。相比之下,也有非變異方法,如 filter() , concat()slice() ,不會(huì)修改原始數(shù)組而是返回一個(gè)新數(shù)組。在使用非變異方法時(shí),可以直接用新數(shù)組替換舊數(shù)組:

example1.items = example1.items.filter(function (item) {
 return item.message.match(/Foo/)
})

可能你覺(jué)得這將導(dǎo)致 Vue.js 棄用已有 DOM 并重新渲染整個(gè)列表——幸運(yùn)的是并非如此。 Vue.js 實(shí)現(xiàn)了一些啟發(fā)算法,以最大化復(fù)用 DOM 元素,因而用另一個(gè)數(shù)組替換數(shù)組是一個(gè)非常高效的操作。

track-by

有時(shí)需要用全新對(duì)象(例如通過(guò) API 調(diào)用創(chuàng)建的對(duì)象)替換數(shù)組。因?yàn)?v-for 默認(rèn)通過(guò)數(shù)據(jù)對(duì)象的特征來(lái)決定對(duì)已有作用域和 DOM 元素的復(fù)用程度,這可能導(dǎo)致重新渲染整個(gè)列表。但是,如果每個(gè)對(duì)象都有一個(gè)唯一 ID 的屬性,便可以使用 track-by 特性給 Vue.js 一個(gè)提示,Vue.js 因而能盡可能地復(fù)用已有實(shí)例。

例如,假定數(shù)據(jù)為:

{
 items: [
 { _uid: '88f869d', ... },
 { _uid: '7496c10', ... }
 ]
}

然后可以這樣給出提示:

<div v-for="item in items" track-by="_uid">
 <!-- content -->
</div>

然后在替換數(shù)組 items 時(shí),如果 Vue.js 遇到一個(gè)包含 _uid: '88f869d' 的新對(duì)象,它知道它可以復(fù)用這個(gè)已有對(duì)象的作用域與 DOM 元素。

track-by $index

如果沒(méi)有唯一的鍵供追蹤,可以使用 track-by="$index" ,它強(qiáng)制讓 v-for 進(jìn)入原位更新模式:片斷不會(huì)被移動(dòng),而是簡(jiǎn)單地以對(duì)應(yīng)索引的新值刷新。這種模式也能處理數(shù)據(jù)數(shù)組中重復(fù)的值。

這讓數(shù)據(jù)替換非常高效,但是也會(huì)付出一定的代價(jià)。因?yàn)檫@時(shí) DOM 節(jié)點(diǎn)不再映射數(shù)組元素順序的改變,不能同步臨時(shí)狀態(tài)(比如 <input> 元素的值)以及組件的私有狀態(tài)。因此,如果 v-for 塊包含 <input> 元素或子組件,要小心使用 track-by="$index"

問(wèn)題

因?yàn)?JavaScript 的限制,Vue.js 不能檢測(cè)到下面數(shù)組變化:

      1.直接用索引設(shè)置元素,如 vm.items[0] = {};

      2.修改數(shù)據(jù)的長(zhǎng)度,如 vm.items.length = 0 。

為了解決問(wèn)題 (1),Vue.js 擴(kuò)展了觀察數(shù)組,為它添加了一個(gè) $set() 方法:

// 與 `example1.items[0] = ...` 相同,但是能觸發(fā)視圖更新
example1.items.$set(0, { childMsg: 'Changed!'})

至于問(wèn)題 (2),只需用一個(gè)空數(shù)組替換 items。

除了 $set() , Vue.js 也為觀察數(shù)組添加了 $remove() 方法,用于從目標(biāo)數(shù)組中查找并刪除元素,在內(nèi)部它調(diào)用 splice() 。因此,不必這樣:

var index = this.items.indexOf(item)
if (index !== -1) {
 this.items.splice(index, 1)
}

只用這樣:

this.items.$remove(item)

對(duì)象 v-for

也可以使用 v-for 遍歷對(duì)象。除了 $index 之外,作用域內(nèi)還可以訪問(wèn)另外一個(gè)特殊變量 $key。

<ul id="repeat-object" class="demo">
 <li v-for="value in object">
 {{ $key }} : {{ value }}
 </li>
</ul>
new Vue({
 el: '#repeat-object',
 data: {
 object: {
  FirstName: 'John',
  LastName: 'Doe',
  Age: 30
 }
 }
})

也可以給對(duì)象的鍵提供一個(gè)別名:

<div v-for="(key, val) in object">
 {{ key }} {{ val }}
</div>

在遍歷對(duì)象時(shí),是按 Object.keys() 的結(jié)果遍歷,但是不能保證它的結(jié)果在不同的 JavaScript 引擎下是一致的。

值域 v-for

v-for 也可以接收一個(gè)整數(shù),此時(shí)它將重復(fù)模板數(shù)次。

<div>
 <span v-for="n in 10">{{ n }} </span>
</div>

顯示過(guò)濾/排序的結(jié)果

有時(shí)我們想顯示過(guò)濾/排序過(guò)的數(shù)組,同時(shí)不實(shí)際修改或重置原始數(shù)據(jù)。有兩個(gè)辦法:

     1.創(chuàng)建一個(gè)計(jì)算屬性,返回過(guò)濾/排序過(guò)的數(shù)組;

     2.使用內(nèi)置的過(guò)濾器 filterBy 和 orderBy。

計(jì)算屬性有更好的控制力,也更靈活,因?yàn)樗侨δ?JavaScript。但是通常過(guò)濾器更方便,詳細(xì)見(jiàn) API。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • vue3中form對(duì)象無(wú)法賦值的問(wèn)題解決

    vue3中form對(duì)象無(wú)法賦值的問(wèn)題解決

    這篇文章給大家介紹了vue3中form對(duì)象無(wú)法賦值的問(wèn)題解決,有時(shí)候?qū)ο蟮闹邓阑钯x不上值,這時(shí)候可以看下賦值的對(duì)象變量名是否和頁(yè)面組件中的ref相同,文中給出了代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01
  • Vue 中自定義文件上傳組件的實(shí)現(xiàn)代碼

    Vue 中自定義文件上傳組件的實(shí)現(xiàn)代碼

    在Vue項(xiàng)目中,自定義文件上傳組件能夠提升用戶交互體驗(yàn)和界面控制,樣式可根據(jù)需求定制,在其他組件中引用時(shí),可以進(jìn)一步擴(kuò)展功能,如文件類型限制和上傳進(jìn)度條,本文給大家介紹Vue 中自定義文件上傳組件的實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Vue使用mounted和created時(shí),this無(wú)法指向data中的數(shù)據(jù)問(wèn)題

    Vue使用mounted和created時(shí),this無(wú)法指向data中的數(shù)據(jù)問(wèn)題

    這篇文章主要介紹了Vue使用mounted和created時(shí),this無(wú)法指向data中的數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行

    如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行

    這篇文章主要介紹了如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行,本文分步驟給大家介紹的非常詳細(xì),包括使用yarn創(chuàng)建vite+vue3項(xiàng)目會(huì)遇到哪些問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • vueScroll實(shí)現(xiàn)移動(dòng)端下拉刷新、上拉加載

    vueScroll實(shí)現(xiàn)移動(dòng)端下拉刷新、上拉加載

    這篇文章主要介紹了vueScroll實(shí)現(xiàn)移動(dòng)端下拉刷新、上拉加載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • VueJs 將接口用webpack代理到本地的方法

    VueJs 將接口用webpack代理到本地的方法

    本篇文章主要介紹了VueJs 將接口用webpack代理到本地的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • vue項(xiàng)目中引入noVNC遠(yuǎn)程桌面的方法

    vue項(xiàng)目中引入noVNC遠(yuǎn)程桌面的方法

    下面小編就為大家分享一篇vue項(xiàng)目中引入noVNC遠(yuǎn)程桌面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 手把手教你寫一個(gè)vue全局注冊(cè)的Toast的實(shí)現(xiàn)

    手把手教你寫一個(gè)vue全局注冊(cè)的Toast的實(shí)現(xiàn)

    本文主要介紹了手把手教你寫一個(gè)vue全局注冊(cè)的Toast的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • vue在取對(duì)象長(zhǎng)度length時(shí)候出現(xiàn)undefined的解決

    vue在取對(duì)象長(zhǎng)度length時(shí)候出現(xiàn)undefined的解決

    這篇文章主要介紹了vue在取對(duì)象長(zhǎng)度length時(shí)候出現(xiàn)undefined的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue中data和data()的區(qū)別說(shuō)明

    vue中data和data()的區(qū)別說(shuō)明

    這篇文章主要介紹了vue中data和data()的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論

吕梁市| 若羌县| 铁力市| 织金县| 阿瓦提县| 金门县| 囊谦县| 祁连县| 改则县| 鲁山县| 闸北区| 长顺县| 浠水县| 阜康市| 万荣县| 桂阳县| 高台县| 德清县| 汉川市| 宁明县| 和硕县| 佛教| 太原市| 焦作市| 宣恩县| 三江| 阿克| 来安县| 个旧市| 霍城县| 柯坪县| 绥江县| 祁连县| 江永县| 天门市| 萍乡市| 南川市| 东方市| 奉贤区| 土默特左旗| 綦江县|