亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue中keep-alive組件的入門使用教程

2019-11-19 11:23:14
字體:
來源:轉載
供稿:網友

一、問題觸發并解決

最近自己在寫vue練習,內容相對簡單,主要是對vue進行熟悉和相關問題發現,查漏補缺。簡單說下練習的項目內容及問題的產生:

練習使用的vue-cli 2.0腳手架搭建,內容就是簡單的仿音樂播放app,功能也相對簡單,大體就是單頁router切換各個專輯列表,點擊進入專輯內容頁面,單擊歌曲名稱可以進行播放、暫停、下一曲功能。

簡單的背景介紹完了,說下問題產生的情形:在從整個歌曲列表頁點擊跳轉到單個專輯列表頁,然后點擊返回按鈕返回歌曲列表頁時,頁面保存了之前的瀏覽位置,但是接口重新請求了數據,因為歌曲列表頁有滾動加載效果,所以數據獲取在vuex里用了數組的concat方法,導致返回請求的數據重新加載了列表里,而v-for循環由于key值有了重復,導致控制臺報錯;說起來可能比較難懂,上一些基本的代碼部分:

vuex里獲取列表數據:GET_COLLECTION_LIST(state, val) { state.collectionList = state.collectionList.concat(val)}歌曲列表里created獲取數據,mounted監聽滾動事件滾動加載,destroyed取消監聽:created(){ this.collectionListMethod({limit: this.limit, offset: this.offset})},mounted(){ window.addEventListener('scroll', this.isScrollBot)}destroyed(){ window.removeEventListener('scroll', this.isScrollBot)}專輯列表頁返回使用的是 this.$router.go(-1)

有問題就要解決問題,通過查詢了解到keep-alive可以對數據進行緩存,路由切換的時候可以使用緩存不用重新觸發接口請求,貌似可以很完美解決問題,實踐出真知,在代碼里添加:

首先在歌曲列表路由里添加meta:{keepAlive: true}為后面的router-view是否需要緩存提供標識{ path: '/songLis', component: SongLis, meta: { keepAlive: true }}然后在router-view外層添加keep-alive,并根據meta參數判斷是否所有路由都需要緩存<keep-alive>  <router-view v-if="$route.meta.keepAlive" /></keep-alive><router-view v-if="!$route.meta.keepAlive"/>

添加完畢,回到頁面看效果!可喜可賀的是控制臺不報錯了,說明keep-alive起作用了,撒花慶祝~~~ 但是事情并沒有那么簡單,當我們從專輯列表切到其他路由,滾動鼠標會發現滾動加載的監聽事件沒有取消,組件destroyed的時候明明取消監聽了??!而且再切回到專輯列表頁的時候,滾動加載反而不執行了,表示一臉懵~

經過查看vue文檔,發現文檔有這么一句話:

<keep-alive> 包裹動態組件時,會緩存不活動的組件實例,而不是銷毀它們。

也就是說使用keep-alive的組件不會觸發destroyed鉤子方法,這就是取消監聽失敗的原因。根據文檔介紹,keep-alive切換時,會觸發自己的activeted和deactiveted兩個鉤子函數,可以理解為vue的created和destroyed兩個鉤子,因此需要修改代碼,在deactivated時候取消監聽,同時在activated的時候恢復監聽,否則切回去的時候滾動監聽也不會有效果:

//keep-alive鉤子函數,組件恢復時觸發activated(){ window.addEventListener('scroll', this.isScrollBot)},//keep-alive鉤子函數,組件變為不可用時觸發deactivated(){ window.removeEventListener('scroll', this.isScrollBot)}

修改后的效果完全符合預期,切換路由頁面保留當位置,不會重復請求接口而且也不會在專輯列表組件外部觸發滾動加載。

二、關于keep-alive

既然用到了keep-alive,就通過文檔簡單總結下相關使用:

上面已經說過,通過keep-alive包裹的組件,在不活動時會緩存組件實例,不會對組件進行銷毀,再次處于活動狀態時,會讀取緩存的內容并保存組件狀態,不用重復請求接口獲取數據。

(1)最基本使用基本用法:

基本用法:<keep-alive> <component :is="view"></component></keep-alive>也可以根據條件判斷:<keep-alive> <comp-a v-if="a > 1"></comp-a> <comp-b v-else></comp-b></keep-alive>這個時候觸發兩個組件切換時,組件內的數據和狀態都會得到保存,如果有input輸入框,輸入框內容會保留

(2)有條件的緩存

keep-alive提供了include、exclude、max三個參數,前兩個允許組件有條件的進行緩存,兩者都可以接受字符串、正則、數組形式;max表示最多可以緩存多少個組件,接受一個number類型。

<keep-alive include="a,b"> <component :is="view"></component></keep-alive>此時只有a、b兩個組件會觸發keep-alive,此處的名字是組件內部name對應名字,如果name不存在,會查找父組件里components里注冊的名字,如果也不存在則不會匹配。正則和數組方法同上,但是需要用v-bind:include=''方式。<keep-alive :max="10"> <component :is="view"></component></keep-alive>

(3)鉤子函數

兩個鉤子函數activated和deactivated,上面已經說過,分別在組件恢復活動狀態和組件失去活動狀態時觸發,可以起到類似created和destroyed鉤子作用。

以上是對keep-alive的個人使用和理解,如有不足還望指正~

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久粉嫩av| 国产香蕉97碰碰久久人人| 精品久久久久久久大神国产| 性色av一区二区三区红粉影视| 国产精品久久久精品| 欧美性xxxxx极品| 色小说视频一区| 91在线视频精品| 午夜精品一区二区三区视频免费看| 日韩人在线观看| 久久综合久久88| 九九热这里只有精品免费看| 国产精品免费观看在线| 欧美激情精品久久久久久久变态| 一本大道亚洲视频| 精品视频—区二区三区免费| 国产精品久久久久91| 亚洲成人久久一区| 国产视频亚洲精品| 亚洲国产欧美一区| 色偷偷888欧美精品久久久| 久久国产精品首页| 欧美日韩成人精品| 久久国产精品影片| 日韩电影在线观看永久视频免费网站| 亚洲国产精彩中文乱码av| 精品视频在线播放免| 欧美性少妇18aaaa视频| 亚洲网站在线观看| 亚洲一区免费网站| 国产情人节一区| 精品国产一区二区三区久久狼5月| 国产不卡av在线免费观看| 亚洲精品色婷婷福利天堂| 久久青草精品视频免费观看| 精品国产乱码久久久久酒店| 日韩久久精品电影| 久久久极品av| 色视频www在线播放国产成人| 亚洲一区二区三区久久| 国产91精品久久久久久| 欧美亚洲在线视频| 久久久久久久久综合| 欧美另类69精品久久久久9999| 日韩av一区在线观看| 成人黄色免费看| 成人伊人精品色xxxx视频| 久久亚洲国产精品| 日韩av手机在线看| 国产精品爽爽爽爽爽爽在线观看| 精品中文字幕视频| 91地址最新发布| 成人免费观看49www在线观看| www.欧美精品一二三区| 69久久夜色精品国产7777| 3344国产精品免费看| 4k岛国日韩精品**专区| 日韩中文字幕在线精品| 国产+人+亚洲| 日韩大片在线观看视频| 国产91精品久| 久久久久久久香蕉网| 国产精品99久久久久久白浆小说| 久久久久久久网站| 国产69精品久久久久99| 日本中文字幕不卡免费| 国产精品 欧美在线| 狠狠做深爱婷婷久久综合一区| 亚洲精品福利在线| 亚洲午夜性刺激影院| 久久久久久久久久久人体| 91午夜在线播放| 久久久久北条麻妃免费看| 国产伦精品一区二区三区精品视频| 久久久国产在线视频| 最近中文字幕mv在线一区二区三区四区| 国产精品爽黄69| 国产精品96久久久久久又黄又硬| 搡老女人一区二区三区视频tv| 亚洲性xxxx| 欧美日韩xxxxx| 国产亚洲在线播放| 91av在线免费观看视频| 精品激情国产视频| 一本大道香蕉久在线播放29| 亚洲欧美日韩一区在线| 日本亚洲精品在线观看| 亚洲欧洲高清在线| 亚洲国产精品999| 欧美日韩一区二区精品| 欧美影院在线播放| 欧美成人久久久| 欧美日韩美女在线观看| 日韩免费在线播放| 欧美夫妻性视频| 在线午夜精品自拍| 亚洲sss综合天堂久久| 亚洲欧美日韩中文在线制服| 久久久久国产一区二区三区| 黑人巨大精品欧美一区二区| 国产精品久久综合av爱欲tv| 日韩在线中文字幕| www国产精品视频| 丁香五六月婷婷久久激情| 亚洲性av在线| 午夜精品久久久久久久99热浪潮| 日本欧美黄网站| 欧美裸体男粗大视频在线观看| 色妞久久福利网| 最新国产成人av网站网址麻豆| 欧美高清无遮挡| 精品国产鲁一鲁一区二区张丽| 国产精品美女主播在线观看纯欲| 国产精品免费久久久| 欧美精品国产精品日韩精品| 欧美亚洲另类制服自拍| 亚洲国产欧美日韩精品| 成人黄色免费网站在线观看| 日韩国产欧美区| 国内外成人免费激情在线视频网站| 91美女高潮出水| 精品magnet| 日韩有码在线观看| 人九九综合九九宗合| 欧美精品激情blacked18| 久久视频这里只有精品| 亚洲第一精品电影| 亚洲精品久久久久久久久久久久| 亚洲成在人线av| 国产精品免费小视频| 国产美女直播视频一区| 欧美日韩国产丝袜美女| 亚洲天堂av在线免费| 亚洲小视频在线观看| 国产精品电影在线观看| 亚洲第一中文字幕在线观看| 正在播放欧美视频| 精品日韩美女的视频高清| 欧美成人网在线| 成人午夜激情网| 国产午夜精品理论片a级探花| 精品亚洲精品福利线在观看| 欧美日本高清视频| 欧美做受高潮电影o| 国产精品三级久久久久久电影| 91精品久久久久久综合乱菊| 亚洲男人天堂2024| 2024亚洲男人天堂| 黄色成人在线播放| 亚洲天堂av在线免费观看| 精品久久香蕉国产线看观看亚洲| 另类视频在线观看| 亚洲第一网站免费视频| 欧美视频在线看| 日韩一区二区福利| 亚洲午夜色婷婷在线| 国产91成人video| 韩国日本不卡在线| 岛国视频午夜一区免费在线观看| 国产色综合天天综合网| 欧美激情在线观看视频| 日韩欧美在线观看| 国产丝袜视频一区| 大荫蒂欧美视频另类xxxx|