問題描述,首頁優化使用keep-alive之后,從別的頁面跳回來,swiper輪播不播放,查了好久資料,有的說要重新調用swiper的init方法進行初始化,等等,最終都沒能解決問題,最終通過查看文檔得知keep-alive緩存組件的是created鈎子會創建一個cache對象,用來作為緩存容器,保存vnode節點。destroyed鈎子則在組件被銷毀的時候清除cache緩存中的所有組件實例。
由此猜想,從其他頁面跳回來時,顯示的頁面可能只是vnode節點,還有渲染出html標簽就執行了new了swiper實例,導致swiper的實例無法掛在到實際的html元素上,所以出現輪播無法播放的問題。
解決方法:
keep-aive組件支持兩個鈎子,activated鈎子在keep-alive組件中代替了created鈎子每次初始化時調用activated,deactivated為銷毀時的鈎子,所以可以申明一個狀態,讓keep-alive組件渲染成html元素后再實例化swiper,就可以解決這個bug。
開始上截圖!!
html代碼:
js代碼:
此方法只是解決了個人需求,記錄下來主要是為了提升記憶,如果可以幫助到別人最好,如果幫助不到,請勿噴!!!