欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中keepAlive組件的作用和使用方法詳解

 更新時(shí)間:2021年07月30日 12:37:56   作者:搬磚猴哥  
vue里提供了keep-alive組件用來緩存狀態(tài),這篇文章主要給大家介紹了關(guān)于vue中keepAlive組件的作用和使用方法的相關(guān)資料,需要的朋友可以參考下

前言

在面試的時(shí)候,很多面試官再問vue的時(shí)候可能就會(huì)提一嘴,你知道keep-alive有什么作用嗎?

keep-alive是vue內(nèi)置的一個(gè)組件,而這個(gè)組件的作用就是能夠緩存不活動(dòng)的組件,我們能夠知道,一般情況下,組件進(jìn)行切換的時(shí)候,默認(rèn)會(huì)進(jìn)行銷毀,如果有需求,某個(gè)組件切換后不進(jìn)行銷毀,而是保存之前的狀態(tài),那么就可以利用keep-alive來實(shí)現(xiàn)

<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)在父組件鏈中。

我這里利用腳手架創(chuàng)建項(xiàng)目后會(huì)生成home和about兩個(gè)組件,并且通過路由進(jìn)行切換

home組件

<template>
  <div class="home">
    <input type="text">
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'home',
  components: {
    HelloWorld
  }
}
</script>

我在home組件中寫了一個(gè)input輸入框

about組件

<template>
  <div class="about">
    <input type="text">
  </div>
</template>
<script>
export default {
  name:"about"
}
</script>

同樣的about組件也放了一個(gè)輸入框

當(dāng)我們?cè)趆ome組件的輸入框輸入一些內(nèi)容的時(shí)候,然后切換到about組件,在切換回home組件,我們會(huì)發(fā)現(xiàn)之前輸入的內(nèi)容被清空了,其實(shí)也容易理解,就是當(dāng)切換到about組建的時(shí)候,home組件就被銷毀了,輸入框的值自然被清空了

我在home組件寫了destroyed生命周期函數(shù)

當(dāng)切換到about組件的時(shí)候home組件的destroyed就觸發(fā)了,所以home組件被銷毀了

那么此時(shí)我們就可以利用keep-alive組件進(jìn)行包裹router-view組件,將不活動(dòng)的組件緩存起來

App組件

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </div>
    <keep-alive>
      <router-view />
    </keep-alive>
    
  </div>
</template>

寫完之后會(huì)發(fā)現(xiàn)當(dāng)切換到about組件時(shí),home組件中的destroyed并沒有觸發(fā),并且home組件的值也保存了下來

但是這樣也肯定不好,我們會(huì)發(fā)現(xiàn),about組件的值也被緩存了,就是所有的路由組件都被緩存了,嚴(yán)重浪費(fèi)性能,而且也不符合需求,我們現(xiàn)在只想緩存home組件

在keep-alive上有兩個(gè)屬性

字符串或正則表達(dá)式。只有匹配的組件會(huì)被緩存。

  • include 值為字符串或者正則表達(dá)式匹配的組件name會(huì)被緩存。
  • exclude 值為字符串或正則表達(dá)式匹配的組件name不會(huì)被緩存。

首先利用include實(shí)現(xiàn),匹配到組件中定義的name,將進(jìn)行緩存

<keep-alive include="home">
   <router-view />
</keep-alive>

我們會(huì)發(fā)現(xiàn)home已經(jīng)被緩存了,但是about沒有被緩存

而exclude就是排除了,這個(gè)就不在演示了,很簡(jiǎn)單,除了這個(gè)我們還可以利用路由中的meta屬性來控制

{
      path: '/',
      name: 'home',
      meta:{
        keepAlive:true
      },
      component: Home
    }

將home的路由規(guī)則鐘的meta添加keepAlive屬性為true,也就是當(dāng)前路由組件要進(jìn)行緩存

keep-alive代碼可以結(jié)合v-if進(jìn)行包裹,如果meta中的keepAlive為true進(jìn)行緩存,否側(cè)不進(jìn)行緩存,這樣可以更靈活一些

<keep-alive>
      <router-view v-if="$route.meta.keepAlive" />
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" />

這樣組件的緩存是實(shí)現(xiàn)了,但是還是會(huì)有一些問題,就是因?yàn)榻M件被緩存,并沒有被銷毀,所以組件在切換的時(shí)候也就不會(huì)被重新創(chuàng)建,自然也就不會(huì)調(diào)用created等生命周期函數(shù),所以此時(shí)要使用activated與deactivated來獲取當(dāng)前組件是否處于活動(dòng)狀態(tài)

我在home組件里面寫入了activated與deactivated生命周期函數(shù)

activated(){
    console.log("哎呀看見我了")
    console.log("----------activated--------")
  },
  deactivated(){
    console.log("討厭??!你又走了")
    console.log("----------deactivated--------")
  }

通過上面的gif圖相信已經(jīng)看得很清楚了,此時(shí)keep-Alive也就差不多了

總結(jié)

到此這篇關(guān)于vue中keepAlive組件作用和使用方法的文章就介紹到這了,更多相關(guān)vue中keepAlive組件使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue下拉菜單組件化開發(fā)詳解

    Vue下拉菜單組件化開發(fā)詳解

    這篇文章主要為大家詳細(xì)介紹了Vue下拉菜單組件化開發(fā)過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue使用swiper實(shí)現(xiàn)左右滑動(dòng)切換圖片

    vue使用swiper實(shí)現(xiàn)左右滑動(dòng)切換圖片

    這篇文章主要為大家詳細(xì)介紹了vue使用swiper實(shí)現(xiàn)左右滑動(dòng)切換圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Vue跳轉(zhuǎn)頁(yè)面的幾種常用方法總結(jié)

    Vue跳轉(zhuǎn)頁(yè)面的幾種常用方法總結(jié)

    在Vue.js中,頁(yè)面跳轉(zhuǎn)是構(gòu)建單頁(yè)面應(yīng)用(SPA)的基本操作之一,本文將介紹Vue中實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種方法,并通過實(shí)例代碼幫助理解每種方法的用法,需要的朋友可以參考下
    2024-09-09
  • Element el-table 表格使用詳解

    Element el-table 表格使用詳解

    我們的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù),不就是以表格的形式存在嗎,所以在界面上顯示、操作,使用表格來處理也是非常合理的,這篇文章給大家介紹Element el-table 表格使用方法,感興趣的朋友一起看看吧
    2024-03-03
  • vue對(duì)于低版本瀏覽器兼容問題的解決思路

    vue對(duì)于低版本瀏覽器兼容問題的解決思路

    很多時(shí)候使用vue開發(fā)的項(xiàng)目,由于無法在低版本瀏覽器上運(yùn)行,所以需要解決下,下面這篇文章主要給大家介紹了關(guān)于vue對(duì)于低版本瀏覽器兼容問題的解決思路,需要的朋友可以參考下
    2023-02-02
  • VUE中操作dom元素的幾種方法(最新推薦)

    VUE中操作dom元素的幾種方法(最新推薦)

    本文給大家總結(jié)了Vue中操作dom元素的多種方法,每種方法結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友參考下吧
    2022-12-12
  • Vue3源碼解析watch函數(shù)實(shí)例

    Vue3源碼解析watch函數(shù)實(shí)例

    這篇文章主要為大家介紹了Vue3源碼解析watch函數(shù)實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Vue提示框組件vue-notification使用詳解

    Vue提示框組件vue-notification使用詳解

    這篇文章主要介紹了Vue提示框組件vue-notification使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Vite中使用Ant?Design?Vue3.x框架教程示例

    Vite中使用Ant?Design?Vue3.x框架教程示例

    這篇文章主要為大家介紹了Vite中使用Ant?Design?Vue3.x框架教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 使用vue-cli(vue腳手架)快速搭建項(xiàng)目的方法

    使用vue-cli(vue腳手架)快速搭建項(xiàng)目的方法

    本篇文章主要介紹了使用vue-cli(vue腳手架)快速搭建項(xiàng)目的方法,vue-cli 是一個(gè)官方發(fā)布 vue.js 項(xiàng)目腳手架,使用 vue-cli 可以快速創(chuàng)建 vue 項(xiàng)目,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評(píng)論