91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue中keepAlive組件的作用和使用方法詳細介紹

發布時間:2021-07-30 16:00:27 來源:億速云 閱讀:223 作者:chen 欄目:開發技術

這篇文章主要講解了“vue中keepAlive組件的作用和使用方法詳細介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“vue中keepAlive組件的作用和使用方法詳細介紹”吧!

前言

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

keep-alive是vue內置的一個組件,而這個組件的作用就是能夠緩存不活動的組件,我們能夠知道,一般情況下,組件進行切換的時候,默認會進行銷毀,如果有需求,某個組件切換后不進行銷毀,而是保存之前的狀態,那么就可以利用keep-alive來實現

<keep-alive>是Vue的內置組件,能在組件切換過程中將狀態保留在內存中,防止重復渲染DOM。

<keep-alive> 包裹動態組件時,會緩存不活動的組件實例,而不是銷毀它們。和 <transition> 相似,<keep-alive> 是一個抽象組件:它自身不會渲染一個 DOM 元素,也不會出現在父組件鏈中。

我這里利用腳手架創建項目后會生成home和about兩個組件,并且通過路由進行切換

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組件中寫了一個input輸入框

about組件

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

同樣的about組件也放了一個輸入框

vue中keepAlive組件的作用和使用方法詳細介紹

當我們在home組件的輸入框輸入一些內容的時候,然后切換到about組件,在切換回home組件,我們會發現之前輸入的內容被清空了,其實也容易理解,就是當切換到about組建的時候,home組件就被銷毀了,輸入框的值自然被清空了

vue中keepAlive組件的作用和使用方法詳細介紹

我在home組件寫了destroyed生命周期函數

vue中keepAlive組件的作用和使用方法詳細介紹

當切換到about組件的時候home組件的destroyed就觸發了,所以home組件被銷毀了

那么此時我們就可以利用keep-alive組件進行包裹router-view組件,將不活動的組件緩存起來

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>

寫完之后會發現當切換到about組件時,home組件中的destroyed并沒有觸發,并且home組件的值也保存了下來

vue中keepAlive組件的作用和使用方法詳細介紹

但是這樣也肯定不好,我們會發現,about組件的值也被緩存了,就是所有的路由組件都被緩存了,嚴重浪費性能,而且也不符合需求,我們現在只想緩存home組件

在keep-alive上有兩個屬性

字符串或正則表達式。只有匹配的組件會被緩存。

  • include 值為字符串或者正則表達式匹配的組件name會被緩存。

  • exclude 值為字符串或正則表達式匹配的組件name不會被緩存。

首先利用include實現,匹配到組件中定義的name,將進行緩存

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

vue中keepAlive組件的作用和使用方法詳細介紹

我們會發現home已經被緩存了,但是about沒有被緩存

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

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

將home的路由規則鐘的meta添加keepAlive屬性為true,也就是當前路由組件要進行緩存

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

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

這樣組件的緩存是實現了,但是還是會有一些問題,就是因為組件被緩存,并沒有被銷毀,所以組件在切換的時候也就不會被重新創建,自然也就不會調用created等生命周期函數,所以此時要使用activated與deactivated來獲取當前組件是否處于活動狀態

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

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

vue中keepAlive組件的作用和使用方法詳細介紹

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

感謝各位的閱讀,以上就是“vue中keepAlive組件的作用和使用方法詳細介紹”的內容了,經過本文的學習后,相信大家對vue中keepAlive組件的作用和使用方法詳細介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

拉萨市| 广安市| 东宁县| 琼结县| 商洛市| 上蔡县| 屏东市| 商丘市| 察哈| 泰和县| 尼木县| 专栏| 铅山县| 孟津县| 富民县| 方山县| 宿松县| 南阳市| 永州市| 电白县| 六安市| 磴口县| 鄂温| 黔西县| 汝南县| 义乌市| 鸡东县| 轮台县| 聂荣县| 吉林市| 伊宁县| 缙云县| 蒙自县| 苏尼特右旗| 汤原县| 临洮县| 长丰县| 保靖县| 甘谷县| 辽阳市| 霍邱县|