Vue 動態(tài)組件與 v-once 指令的實(shí)現(xiàn)
本文介紹了Vue 動態(tài)組件與 v-once 指令的實(shí)現(xiàn),分享給大家,具體如下:
<div id="root">
<child-one></child-one>
<child-two></child-two>
<button>change</button>
</div>
Vue.component('child-one', {
template: `<div>child-one</div>`,
})
Vue.component('child-two', {
template: `<div>child-two</div>`,
})
let vm = new Vue({
el: '#root'
})
上面代碼需實(shí)現(xiàn),當(dāng)點(diǎn)擊按鈕時,child-one和child-two實(shí)現(xiàn)toggle效果,該怎么實(shí)現(xiàn)呢?
<div id="root">
<child-one v-if="type === 'child-one'"></child-one>
<child-two v-if="type === 'child-two'"></child-two>
<button @click="handleBtnClick">change</button>
</div>
Vue.component('child-one', {
template: `<div>child-one</div>`,
})
Vue.component('child-two', {
template: `<div>child-two</div>`,
})
let vm = new Vue({
el: '#root',
data: {
type:'child-one'
},
methods: {
handleBtnClick(){
this.type = this.type === 'child-one' ? 'child-two' : 'child-one'
}
}
})
通過上面handleBtnClick函數(shù)的實(shí)現(xiàn),配合v-if指令就能實(shí)現(xiàn)toggle效果
動態(tài)組件
下面這段代碼實(shí)現(xiàn)的效果和上面是一樣的。
<div id="root">
<component :is="type"></component> //is內(nèi)容的變化,會自動的加載不同的組件
<button @click="handleBtnClick">change</button>
</div>
Vue.component('child-one', {
template: `<div>child-one</div>`,
})
Vue.component('child-two', {
template: `<div>child-two</div>`,
})
let vm = new Vue({
el: '#root',
data: {
type:'child-one'
},
methods: {
handleBtnClick(){
this.type = this.type === 'child-one' ? 'child-two' : 'child-one'
}
}
})
動態(tài)組件的意思是它會根據(jù)is里面數(shù)據(jù)的變化,會自動的加載不同的組件
v-noce指令
每次點(diǎn)擊按鈕切換的時候,Vue 底層會幫我們干什么呢?Vue 底層會判斷這個child-one組件現(xiàn)在不用了,取而代之要用child-two組件,然后它就會把child-one組件銷毀掉,在創(chuàng)建一個child-two組件。假設(shè)這時child-two組件要隱藏,child-one組件要顯示,這個時候要把剛剛創(chuàng)建的child-two銷毀掉,在重新創(chuàng)建child-one組件,也就是每一次切換的時候,底層都是要銷毀一個組件,在創(chuàng)建一個組件,這種操作會消耗一定的性能。如果我們的組件的內(nèi)容,每次都是一樣的可以在上面加一個v-once,看下面代碼。
Vue.component('child-one', {
template: `<div v-once>child-one</div>`,
})
Vue.component('child-two', {
template: `<div v-once>child-two</div>`,
})
加上v-once指令之后,有什么好處呢?當(dāng)chlid-one組件第一次被渲染時,因?yàn)榻M件上面有一個v-once指令,所以它直接就放到內(nèi)存里了,當(dāng)切換的時候child-two組件第一次被渲染時,它也會被放到內(nèi)存里,再次點(diǎn)擊切換時,這時并不需要再重新創(chuàng)建一個child-one組件了,而是從內(nèi)存里直接拿出以前的child-one組件,它的性能會更高一些。
所以在 Vue 當(dāng)中,通過v-once指令,可以提高一些靜態(tài)內(nèi)容的展示效率
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
VUE+Element實(shí)現(xiàn)增刪改查的示例源碼
這篇文章主要介紹了VUE+Element實(shí)現(xiàn)增刪改查的示例源碼,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下2020-11-11
element-ui中select下拉框加載大數(shù)據(jù)渲染優(yōu)化方式
這篇文章主要介紹了element-ui中select下拉框加載大數(shù)據(jù)渲染優(yōu)化方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Vue.js+Layer表格數(shù)據(jù)綁定與實(shí)現(xiàn)更新的實(shí)例
下面小編就為大家分享一篇Vue.js+Layer表格數(shù)據(jù)綁定與實(shí)現(xiàn)更新的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
nginx部署訪問vue-cli搭建的項(xiàng)目的方法
本篇文章主要介紹了nginx部署訪問vue-cli搭建的項(xiàng)目的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
打通前后端構(gòu)建一個Vue+Express的開發(fā)環(huán)境
這篇文章主要介紹了打通前后端構(gòu)建一個Vue+Express的開發(fā)環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
vue如何實(shí)現(xiàn)關(guān)閉對話框后刷新列表
這篇文章主要介紹了vue如何實(shí)現(xiàn)關(guān)閉對話框后刷新列表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04

