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

Vuejs第十二篇之動(dòng)態(tài)組件全面解析

 更新時(shí)間:2016年09月09日 09:47:59   作者:qq20004604  
組件(Component)是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。接下來(lái)通過(guò)本文給大家介紹Vuejs第十二篇之動(dòng)態(tài)組件,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧

什么是組件?

組件(Component)是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能。在有些情況下,組件也可以是原生 HTML 元素的形式,以 is 特性擴(kuò)展。

本篇資料是小編參考官方文檔的基礎(chǔ)上整理的一篇更加細(xì)致的說(shuō)明,代碼更多更全,非常適合新手學(xué)習(xí)。

官方文檔:

http://cn.vuejs.org/guide/components.html#u52A8_u6001_u7EC4_u4EF6

動(dòng)態(tài)組件介紹如下所示:

①簡(jiǎn)單來(lái)說(shuō):

就是幾個(gè)組件放在一個(gè)掛載點(diǎn)下,然后根據(jù)父組件的某個(gè)變量來(lái)決定顯示哪個(gè),或者都不顯示。

②動(dòng)態(tài)切換:

在掛載點(diǎn)使用component標(biāo)簽,然后使用v-bind:is=”組件名”,會(huì)自動(dòng)去找匹配的組件名,如果沒(méi)有,則不顯示;

改變掛載的組件,只需要修改is指令的值即可。

如示例代碼:

<div id="app"> 
<button @click="toshow">點(diǎn)擊讓子組件顯示</button> 
<component v-bind:is="which_to_show"></component> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
data: { 
which_to_show: "first" 
}, 
methods: { 
toshow: function () { //切換組件顯示 
var arr = ["first", "second", "third", ""]; 
var index = arr.indexOf(this.which_to_show); 
if (index < 3) { 
this.which_to_show = arr[index + 1]; 
} else { 
this.which_to_show = arr[0]; 
} 
} 
}, 
components: { 
first: { //第一個(gè)子組件 
template: "<div>這里是子組件1</div>" 
}, 
second: { //第二個(gè)子組件 
template: "<div>這里是子組件2</div>" 
}, 
third: { //第三個(gè)子組件 
template: "<div>這里是子組件3</div>" 
}, 
} 
}); 
</script> 

說(shuō)明:

點(diǎn)擊父組件的按鈕,會(huì)自動(dòng)切換顯示某一個(gè)子組件(根據(jù)which_to_show這個(gè)變量的值來(lái)決定)。

③keep-alive

簡(jiǎn)單來(lái)說(shuō),被切換掉(非當(dāng)前顯示)的組件,是直接被移除了。
在父組件中查看this.$children屬性,可以發(fā)現(xiàn),當(dāng)子組件存在時(shí),該屬性的length為1,而子組件不存在時(shí),該屬性的length是0(無(wú)法獲取到子組件);

假如需要子組件在切換后,依然需要他保留在內(nèi)存中,避免下次出現(xiàn)的時(shí)候重新渲染。那么就應(yīng)該在component標(biāo)簽中添加keep-alive屬性。

如代碼:

<div id="app"> 
<button @click="toshow">點(diǎn)擊讓子組件顯示</button> 
<component v-bind:is="which_to_show" keep-alive></component> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
data: { 
which_to_show: "first" 
}, 
methods: { 
toshow: function () { //切換組件顯示 
var arr = ["first", "second", "third", ""]; 
var index = arr.indexOf(this.which_to_show); 
if (index < 3) { 
this.which_to_show = arr[index + 1]; 
} else { 
this.which_to_show = arr[0]; 
} 
console.log(this.$children); 
} 
}, 
components: { 
first: { //第一個(gè)子組件 
template: "<div>這里是子組件1</div>" 
}, 
second: { //第二個(gè)子組件 
template: "<div>這里是子組件2</div>" 
}, 
third: { //第三個(gè)子組件 
template: "<div>這里是子組件3</div>" 
}, 
} 
}); 
</script> 

說(shuō)明:

初始情況下,vm.$children屬性中只有一個(gè)元素(first組件),點(diǎn)擊按鈕切換后,vm.$children屬性中有兩個(gè)元素,再次切換后,則有三個(gè)元素(三個(gè)子組件都保留在內(nèi)存中)。

之后無(wú)論如何切換,將一直保持有三個(gè)元素。

④activate鉤子

簡(jiǎn)單來(lái)說(shuō),他是延遲加載。

例如,在發(fā)起ajax請(qǐng)求時(shí),會(huì)需要等待一些時(shí)間,假如我們需要在ajax請(qǐng)求完成后,再進(jìn)行加載,那么就需要用到activate鉤子了。

具體用法來(lái)說(shuō),activate是和template、data等屬性平級(jí)的一個(gè)屬性,形式是一個(gè)函數(shù),函數(shù)里默認(rèn)有一個(gè)參數(shù),而這個(gè)參數(shù)是一個(gè)函數(shù),執(zhí)行這個(gè)函數(shù)時(shí),才會(huì)切換組件。

為了證明他的延遲加載性,在服務(wù)器端我設(shè)置當(dāng)發(fā)起某個(gè)ajax請(qǐng)求時(shí),會(huì)延遲2秒才返回內(nèi)容,因此,第一次切換組件2時(shí),需要等待2秒才會(huì)成功切換:

<div id="app"> 
<button @click="toshow">點(diǎn)擊讓子組件顯示</button> 
<component v-bind:is="which_to_show"></component> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
data: { 
which_to_show: "first" 
}, 
methods: { 
toshow: function () { //切換組件顯示 
var arr = ["first", "second", "third", ""]; 
var index = arr.indexOf(this.which_to_show); 
if (index < 3) { 
this.which_to_show = arr[index + 1]; 
} else { 
this.which_to_show = arr[0]; 
} 
console.log(this.$children); 
} 
}, 
components: { 
first: { //第一個(gè)子組件 
template: "<div>這里是子組件1</div>" 
}, 
second: { //第二個(gè)子組件 
template: "<div>這里是子組件2,這里是ajax后的內(nèi)容:{{hello}}</div>", 
data: function () { 
return { 
hello: "" 
} 
}, 
activate: function (done) { //執(zhí)行這個(gè)參數(shù)時(shí),才會(huì)切換組件 
var self = this; 
$.get("/test", function (data) { //這個(gè)ajax我手動(dòng)在服務(wù)器端設(shè)置延遲為2000ms,因此需要等待2秒后才會(huì)切換 
self.hello = data; 
done(); //ajax執(zhí)行成功,切換組件 
}) 
} 
}, 
third: { //第三個(gè)子組件 
template: "<div>這里是子組件3</div>" 
} 
} 
}); 
</script> 

代碼效果:

【1】第一次切換到組件2時(shí),需要等待2秒后才能顯示(因?yàn)榘l(fā)起ajax);

【2】在有keep-alive的情況下,第二次或之后切換到組件2時(shí),無(wú)需等待;但ajax內(nèi)容,需要在第一次發(fā)起ajax兩秒后才會(huì)顯示;

【3】在無(wú)keep-alive的情況下(切換掉后沒(méi)有保存在內(nèi)存中),第二次切換到組件2時(shí),依然需要等待。

【4】等待時(shí),不影響再次切換(即等待組件2的時(shí)候,再次點(diǎn)擊切換,可以直接切換到組件3);

說(shuō)明:

【1】只有在第一次渲染組件時(shí),才會(huì)執(zhí)行activate,且該函數(shù)只會(huì)執(zhí)行一次(在第一次組件出現(xiàn)的時(shí)候延遲組件出現(xiàn))

【2】沒(méi)有keep-alive時(shí),每次切換組件出現(xiàn)都是重新渲染(因?yàn)橹半[藏時(shí)執(zhí)行了destroy過(guò)程),因此會(huì)執(zhí)行activate方法。

⑤transition-mode過(guò)渡模式

簡(jiǎn)單來(lái)說(shuō),動(dòng)態(tài)組件切換時(shí),讓其出現(xiàn)動(dòng)畫效果。(還記不記得在過(guò)渡那一節(jié)的說(shuō)明,過(guò)渡適用于動(dòng)態(tài)組件)
默認(rèn)是進(jìn)入和退出一起完成;(可能造成進(jìn)入的內(nèi)容出現(xiàn)在退出內(nèi)容的下方,這個(gè)下方指y軸方面偏下的,等退出完畢后,進(jìn)入的才會(huì)出現(xiàn)在正確的位置);

transition-mode=”out-in”時(shí),動(dòng)畫是先出后進(jìn);
transition-mode=”in-out”時(shí),動(dòng)畫是先進(jìn)后出(同默認(rèn)情況容易出現(xiàn)的問(wèn)題);

示例代碼:(使用自定義過(guò)渡名和animate.css文件)

<div id="app"> 
<button @click="toshow">點(diǎn)擊讓子組件顯示</button> 
<component v-bind:is="which_to_show" class="animated" transition="bounce" transition-mode="out-in"></component> 
</div> 
<script> 
Vue.transition("bounce", { 
enterClass: 'bounceInLeft', 
leaveClass: 'bounceOutRight' 
}) 
var vm = new Vue({ 
el: '#app', 
data: { 
which_to_show: "first" 
}, 
methods: { 
toshow: function () { //切換組件顯示 
var arr = ["first", "second", "third", ""]; 
var index = arr.indexOf(this.which_to_show); 
if (index < 3) { 
this.which_to_show = arr[index + 1]; 
} else { 
this.which_to_show = arr[0]; 
} 
} 
}, 
components: { 
first: { //第一個(gè)子組件 
template: "<div>這里是子組件1</div>" 
}, 
second: { //第二個(gè)子組件 
template: "<div>這里是子組件2,這里是ajax后的內(nèi)容:{{hello}}</div>", 
data: function () { 
return { 
hello: "" 
} 
} 
}, 
third: { //第三個(gè)子組件 
template: "<div>這里是子組件3</div>" 
} 
} 
}); 
</script> 

以上所述是小編給大家介紹的Vuejs第十二篇之動(dòng)態(tài)組件,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue+SSM實(shí)現(xiàn)驗(yàn)證碼功能

    vue+SSM實(shí)現(xiàn)驗(yàn)證碼功能

    這篇文章主要介紹了vue+SSM實(shí)現(xiàn)驗(yàn)證碼功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域(rectangle marker)的方法

    vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域(rectangle marker)的方法

    這篇文章主要介紹了vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域 rectangle marker的方法,幫助大家實(shí)現(xiàn)區(qū)域標(biāo)記功能,感興趣的朋友可以了解下
    2020-10-10
  • el-table表格排序(多列排序和遠(yuǎn)程排序)

    el-table表格排序(多列排序和遠(yuǎn)程排序)

    本文主要介紹了el-table表格排序(多列排序和遠(yuǎn)程排序),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 一文教你解決Vue所有報(bào)錯(cuò)

    一文教你解決Vue所有報(bào)錯(cuò)

    Vue是一個(gè)流行的前端框架,許多web開(kāi)發(fā)人員使用Vue來(lái)構(gòu)建他們的應(yīng)用程序。然而,正如任何其他框架一樣,Vue也可能會(huì)發(fā)生錯(cuò)誤。在這篇技術(shù)文章中,我們將探討Vue常見(jiàn)的報(bào)錯(cuò)以及如何解決它們
    2023-03-03
  • vue3中虛擬dom的介紹與使用詳解

    vue3中虛擬dom的介紹與使用詳解

    Vue?是如何將一份模板轉(zhuǎn)換為真實(shí)的?DOM?節(jié)點(diǎn)的,又是如何高效地更新這些節(jié)點(diǎn)的呢,這些都離不開(kāi)虛擬dom這個(gè)概念,下面我們就來(lái)了解下虛擬dom這個(gè)概念以及它是什么吧
    2024-01-01
  • Vue中使用mixin擴(kuò)展組件功能的基本步驟

    Vue中使用mixin擴(kuò)展組件功能的基本步驟

    Mixin是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中的類,提供了方法的實(shí)現(xiàn),其他類可以訪問(wèn)mixin類的方法而不必成為其子類在Vue中,可以使用mixin來(lái)擴(kuò)展組件的功能,本文給大家介紹了Vue中如何使用mixin擴(kuò)展組件功能,需要的朋友可以參考下
    2024-11-11
  • 解決vue net :ERR_CONNECTION_REFUSED報(bào)錯(cuò)問(wèn)題

    解決vue net :ERR_CONNECTION_REFUSED報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了解決vue net :ERR_CONNECTION_REFUSED報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 完美解決axios在ie下的兼容性問(wèn)題

    完美解決axios在ie下的兼容性問(wèn)題

    下面小編就為大家分享一篇完美解決axios在ie下的兼容性問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • axios+vue請(qǐng)求時(shí)攜帶cookie的方法實(shí)例

    axios+vue請(qǐng)求時(shí)攜帶cookie的方法實(shí)例

    做項(xiàng)目時(shí)遇到一個(gè)需求,后端需要在接口請(qǐng)求時(shí),對(duì)用戶登陸狀態(tài)進(jìn)行判斷,需要在請(qǐng)求時(shí)攜帶Cookie,下面這篇文章主要給大家介紹了關(guān)于axios+vue請(qǐng)求時(shí)攜帶cookie的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法

    element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法

    今天小編就為大家分享一篇element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論

金华市| 巫溪县| 清新县| 郧西县| 拜泉县| 新密市| 阿克陶县| 雷山县| 左云县| 临沭县| 渑池县| 云安县| 巴东县| 营口市| 乐都县| 英德市| 岑巩县| 广河县| 民勤县| 齐齐哈尔市| 巴马| 东平县| 兴文县| 广丰县| 吴旗县| 双峰县| 杨浦区| 兴安盟| 随州市| 永平县| 盐池县| 蓬溪县| 永寿县| 凤山县| 建昌县| 临沧市| 关岭| 乌鲁木齐县| 柳河县| 府谷县| 华坪县|