keep-alive(切換頁(yè)面,保持狀態(tài))

接觸過(guò)電商網(wǎng)站,大家可能對(duì)類似京東的一些方面比較有印象,比如我正在商品列表瀏覽商品,瀏覽了很長(zhǎng)一段的商品,然后點(diǎn)擊切換到其他頁(yè)面了,再次點(diǎn)擊回到商品列表頁(yè)面,還在之前瀏覽的地方,類似這種功能是怎么實(shí)現(xiàn)的呢?

這次就說(shuō)說(shuō)在vue中的簡(jiǎn)單實(shí)現(xiàn)。

vue官網(wǎng)提供了keep-alive的方法(也算是內(nèi)部封裝好的組件吧)

官網(wǎng)介紹中提到,keep-alive只能包裹在封裝的組件中,而不能直接包裹在類似div、h1等原生標(biāo)簽上,那么我們要想保持狀態(tài),就得把那部分封裝在一個(gè)功能性的組件上。

來(lái)看個(gè)demo

1、這邊把路由分為幾個(gè)部分,實(shí)現(xiàn)同一個(gè)路由的不同模塊的切換效果。好吧,這不是重點(diǎn)。

這里使用keep-alive包裹插槽(router-view),那么在這個(gè)路由模塊渲染的代碼就會(huì)保持之前的狀態(tài)

<div id="routerCenterDiv">
    <transition name="slide-fade" mode="out-in">
        <keep-alive>
          <router-view name="routerCenter"/>
        </keep-alive>
    </transition>
</div>

2、組件內(nèi)容部分(這里刪除了一些邏輯代碼,大家關(guān)注重點(diǎn)即可)

內(nèi)部組件是一個(gè)視頻,設(shè)置為系統(tǒng)剛加載時(shí)的首屏動(dòng)畫顯示,點(diǎn)擊導(dǎo)航切換路由后暫停該視頻,避免資源重復(fù)加載,再通過(guò)標(biāo)題切換回首頁(yè)時(shí)繼續(xù)播放視頻。

這里有2個(gè)方法:activated()和deactivated()

第一個(gè)方法activated是在該路由渲染時(shí)調(diào)用的方法,當(dāng)我們切換到其他路由時(shí)會(huì)調(diào)用deactivated方法,這里mounted等方法只會(huì)調(diào)用一次,銷毀方法不會(huì)調(diào)用,因?yàn)樗鼤?huì)保持該路由的狀態(tài)一直維持,而不進(jìn)行銷毀。

<template>
  <div id="home">
    <video
      ref="MaskVideo"
      autoplay
      muted
      poster="../static/img/index/111.png"
      style="object-fit:fill"
      width="1920px"
      height="1080px"
    ></video>
  </div>
</template>

<script>
export default {
  name: "home",
  components: {},
  data() {
    return {

    };
  },
  activated() {
    if (this.$refs.MaskVideo.src) this.$refs.MaskVideo.play();
  },
  deactivated() {
    if (this.$refs.MaskVideo.src) this.$refs.MaskVideo.pause();
  }
};
</script>

3、路由配置

這里通過(guò)給該路由設(shè)置keepAlive為true保持該路由的狀態(tài)

export default new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/',
      name: 'Home',
      components: {
        routerCenter: Home,
      },
      meta: {
        keepAlive: true // 需要被緩存
      }
    },
  ],
});

這樣就可以實(shí)現(xiàn)保持狀態(tài)的效果了。

大家也可以看看官網(wǎng)的具體介紹。

地址:vue官網(wǎng)keep-alive

如有問(wèn)題,請(qǐng)指出,接受批評(píng)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容