vue動(dòng)態(tài)路由組件緩存
<keep-alive>是Vue的內(nèi)置組件罐寨,能在組件切換過程中將狀態(tài)保留在內(nèi)存中,防止重復(fù)渲染DOM。<keep-alive> 包裹動(dòng)態(tài)組件時(shí)唇辨,會(huì)緩存不活動(dòng)的組件實(shí)例,而不是銷毀它們能耻。和 <transition> 相似赏枚,<keep-alive> 是一個(gè)抽象組件:它自身不會(huì)渲染一個(gè) DOM 元素,也不會(huì)出現(xiàn)在父組件鏈中晓猛。prop :
- include : 字符串或者正則表達(dá)式饿幅, 只有匹配的組件才會(huì)被緩存 。 (也可用數(shù)組戒职,但是中間不能有空格@醵鳌)
- exclude : 字符串或者正則表達(dá)式,匹配的元素將不會(huì)被緩存 洪燥。(也可用數(shù)組摄凡,但是中間不能有空格!)
- max : 同時(shí)緩存幾個(gè) 蚓曼,超過幾個(gè)之后的就不會(huì)被緩存了亲澡。
有兩個(gè)生命周期函數(shù):
activated :激活
deactivated :失活
利用keep-alive實(shí)現(xiàn)滾動(dòng)條保存:
思路 : 在路由頁(yè)面離開 beforeRouterEnter 中保存當(dāng)前滾動(dòng)條距離頂部的位置,再用 activated 鉤子函數(shù) 當(dāng)他再次被激活時(shí)纫版,讓他的滾動(dòng)條等于離開時(shí)保存的那個(gè)值床绪。
vue中生命周期鉤子函數(shù)
beforeCreate :組件實(shí)例剛被創(chuàng)建,組件屬性計(jì)算之前其弊,如data屬性等
created :組件實(shí)例創(chuàng)建完成癞己,屬性已綁定,但DOM還未生成梭伐,$el屬性還不存在
beforeMount :模板編譯 / 掛載之前
mounted :模板編譯 / 掛載之后
beforeUpdate :組件更新之前
updated :組件更新之后
activated :組件被激活時(shí)調(diào)用
deactivated :組件被移除時(shí)調(diào)用
beforeDestory :組件銷毀前調(diào)用
destoryed :組件銷毀后調(diào)用
(1) 創(chuàng)建階段
創(chuàng)建的標(biāo)志點(diǎn)是New vue()痹雅,beforeCreate和created都發(fā)生在創(chuàng)建動(dòng)作之后,但區(qū)別在于beforeCreate觸發(fā)的時(shí)候數(shù)據(jù)還沒初始化和綁定糊识,而created的時(shí)候就生成好了绩社。
(2) 掛載階段
beforeMount和mounted兩者主要區(qū)別在于模板是否編譯和掛載了。
(3) 更新階段
beforeUpdate 和 updated 就是當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候出發(fā)的赂苗。
(4) 銷毀階段
beforeDestory 和 destoryed 的區(qū)別就是el的值data的數(shù)據(jù)依然在的愉耙。這是因?yàn)?destroy只是銷毀一個(gè)實(shí)例,清理它與其它實(shí)例的連接拌滋,解綁它的全部指令及事件監(jiān)聽器朴沿,并不會(huì)清除data的數(shù)據(jù)或者清除dom。