<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
keep-alive是vue的內建元件,可以用來快取元件。當它包裹動態元件時,會快取不活動的元件範例,不會銷燬它們;將不活動的元件的狀態保留在記憶體中,可以防止重複渲染DOM,減少載入事件和效能消耗。
注意:keep-alive是一個抽象元件,自身不會渲染成一個DOM元素,也不會出現在父元件鏈中。
原理:
在 created 函數呼叫時將需要快取的 VNode 節點儲存在 this.cache 中/在render(頁面渲染) 時,如果 VNode 的 name 符合快取條件(可以用 include 以及 exclude 控制),則會從 this.cache 中取出之前快取的 VNode 範例進行渲染。
在APP.js中快取所有元件
<template> <div id="app"> <keep-alive> <NativeBtn> <router-view /> </keep-alive> </div> </template>
快取某個元件就直接在該元件的外層巢狀一層<keep-alive>
<template> <div id="app"> <!-- 只快取NativeBtn元件 --> <keep-alive> <NativeBtn /> </keep-alive> <router-view /> </div> </template>
先來看看不加keep alive的情況
程式碼:
keepAliveDemo的程式碼
<template> <div> <button @click="changeComp">切換</button> <component :is="showComp" /> </div> </template> <script> import KeepAlivePageC from "./KeepAlivePageC.vue"; import KeepAlivePageB from "./KeepAlivePageB.vue"; export default { name: "keepAliveDemo", components: { KeepAlivePageC, KeepAlivePageB }, data() { return { compType: "1", }; }, computed: { showComp() { if (this.compType === "1") { return KeepAlivePageC; } else { return KeepAlivePageB; } }, }, methods: { changeComp() { console.log("==== 點選切換按鈕"); this.compType = this.compType === "1" ? "2" : "1"; }, }, }; </script>
KeepAlivePageB的程式碼
<template> <div>KeepAlivePageB</div> </template> <script> export default { name: "KeepAlivePageB", beforeCreate() { console.log(" KeepAlivePageB beforeCreate 方法執行了"); }, created() { console.log(" KeepAlivePageB created 方法執行了"); }, beforeMount() { console.log(" KeepAlivePageB beforeMount 方法執行了"); }, mounted() { console.log(" KeepAlivePageB mounted 方法執行了"); }, beforeUpdate() { console.log(" KeepAlivePageB beforeUpdate 方法執行了"); }, updated() { console.log(" KeepAlivePageB updated 方法執行了"); }, beforeDestroy() { console.log(" KeepAlivePageB beforeDestroy 方法執行了"); }, destroyed() { console.log(" KeepAlivePageB destroyed 方法執行了"); }, }; </script>
KeepAlivePageC的程式碼
<template> <div>KeepAlivePageC</div> </template> <script> export default { name: "KeepAlivePageC", beforeCreate() { console.log(" KeepAlivePageC beforeCreate 方法執行了"); }, created() { console.log(" KeepAlivePageC created 方法執行了"); }, beforeMount() { console.log(" KeepAlivePageC beforeMount 方法執行了"); }, mounted() { console.log(" KeepAlivePageC mounted 方法執行了"); }, beforeUpdate() { console.log(" KeepAlivePageC beforeUpdate 方法執行了"); }, updated() { console.log(" KeepAlivePageC updated 方法執行了"); }, beforeDestroy() { console.log(" KeepAlivePageC beforeDestroy 方法執行了"); }, destroyed() { console.log(" KeepAlivePageC destroyed 方法執行了"); }, }; </script>
不使用keep alive時,切換按鈕會有元件的建立和銷燬
再來看下使用keep alive的情況。修改keepAliveDemo佈局程式碼
<template> <div> <button @click="changeComp">切換</button> <keep-alive> <component :is="showComp" /> </keep-alive> </div> </template>
發現開始會有元件的建立,但是沒有元件的銷燬,當兩個元件都建立了範例之後,再點選切換按鈕,元件既不建立也不銷燬,說明使用了快取的元件範例。
include:字串或者正規表示式。只有匹配的元件會被快取;
exclude:字串或者正規表示式。任何匹配的元件都不會被快取。
只有匹配上的元件才會被快取,沒匹配上的元件不會被快取。
修改keepAliveDemo佈局程式碼如下
<template> <div> <button @click="changeComp">切換</button> <keep-alive include="KeepAlivePageC"> <component :is="showComp" /> </keep-alive> </div> </template>
可以看到KeepAlivePageC只建立了一次,而KeepAlivePageB一直在建立和銷燬
匹配上的元件不會被被快取,沒匹配上的元件會被快取。
修改keepAliveDemo佈局程式碼如下
<template> <div> <button @click="changeComp">切換</button> <keep-alive exclude="KeepAlivePageC"> <component :is="showComp" /> </keep-alive> </div> </template>
可以看到KeepAlivePageB只建立了一次,而KeepAlivePageC一直在建立和銷燬
和keep-alive相關的生命勾點是activated和deactivated
activated:被 keep-alive 快取的元件啟用時呼叫
deactivated:被 keep-alive 快取的元件失活時呼叫
在KeepAlivePageB和KeepAlivePageC中新增activated和deactivated勾點,依然使用上面的exclude的例子
可以看到當KeepAlivePageB活動使會執行activated勾點,失活時會呼叫deactivated勾點
到此這篇關於vue中快取元件keep alive的介紹及使用方法的文章就介紹到這了,更多相關vue keep alive內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援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