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

Vue淺析講解動(dòng)態(tài)組件與緩存組件及異步組件的使用

 更新時(shí)間:2022年09月13日 09:35:04   作者:H5_ljy  
這篇文章主要介紹了Vue開發(fā)中的動(dòng)態(tài)組件與緩存組件及異步組件的使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.什么是動(dòng)態(tài)組件

當(dāng)我們希望頁(yè)面中的某個(gè)地方,在不同組件之間進(jìn)行動(dòng)態(tài)切換,這時(shí)候除了條件渲染,還可以使用動(dòng)態(tài)組件。

2.如何實(shí)現(xiàn)動(dòng)態(tài)組件渲染

vue提供了一個(gè)內(nèi)置的組件,專門用來(lái)實(shí)現(xiàn)動(dòng)態(tài)組件的渲染:通過(guò) is 屬性動(dòng)態(tài)指定要渲染的組件

因?yàn)橐秩镜慕M件是不確定的,所以要通過(guò)data申明一個(gè)變量用來(lái)接收組件的名稱,用 :is 動(dòng)態(tài)綁定這個(gè)變量到組件中,通過(guò)按鈕添加事件改變變量的值來(lái)切換相應(yīng)組件

案例:

//父組件App中
<template>
  <div v-cloak class="App">
    <button v-for="(item, index) in arr" :key="index" @click="()=>msg=item">點(diǎn)擊切換box{{index+1}}組件</button>
    <component :is="msg"></component>
  </div>
</template>
<script>
  import box1 from "./components/box1.vue"
  import box2 from "./components/box2.vue"
  import box3 from "./components/box3.vue"
  export default {  
    data() {
      return {
        msg: 'box1',
        arr:['box1', 'box2', 'box3']
      }
    },
    components: {
      box1,
      box2,
      box3
    },
  }
//子組件box1中
<template>
        <div>
            <h1>box1組件中</h1>
        </div>
</template>
//子組件box2中
<template>
<div>
    <h1>box2組件中</h1>
</div>
</template>
//子組件box3中
<template>
    <div>
      <h1>box3組件中</h1>
    </div>
</template>

3.如何實(shí)現(xiàn)緩存組件

動(dòng)態(tài)組件的切換,切換后是不會(huì)緩存之前被切換掉的組件的,每次切換新組件的時(shí)候,Vue 都創(chuàng)建了一個(gè)新的組件對(duì)象。

有時(shí)候我們希望在A組件時(shí)用戶做了一些操作,切換B組件時(shí)做了一些操作,當(dāng)切回A組件時(shí)希望記住A的操作,不要重新創(chuàng)建A組件,keep-alive可以緩存動(dòng)態(tài)切換的組件,代碼如下:

//默認(rèn)全部組件緩存
<keep-alive>
     	<components :is="msg"></components>
 </keep-alive>

keep-alive提供了三種匹配組件的方法:

1.include 用來(lái)指定:只有名稱匹配的組件會(huì)被緩存。多個(gè)組件名之間使用英文的逗號(hào)分隔; 可以寫組件名字符串 也可以寫正則

<keep-alive :include="/box2|box3/">  //匹配bo2和box3組件緩存
        <component :is="msg"></component>
    </keep-alive>

2.exclude 只有名稱匹配的組件不會(huì)被緩存。多個(gè)組件名之間使用英文的逗號(hào)分隔;

    <keep-alive exclude="box2">
        <component :is="msg"></component>
    </keep-alive>

3.max 填數(shù)字,表示緩存最近被渲染過(guò)的幾個(gè)組件

    <keep-alive :max="2">
        <component :is="msg"></component>
    </keep-alive>

keep-alive對(duì)應(yīng)的生命周期函數(shù):

當(dāng)組件被緩存時(shí),會(huì)自動(dòng)觸發(fā)組件的 deactivated 生命周期函數(shù)。

當(dāng)組件被激活時(shí),會(huì)自動(dòng)觸發(fā)組件的 activated 生命周期函數(shù)。

4.異步組件

vue開發(fā)過(guò)程中,我們會(huì)做出特別多特別多的組件,包括login,header,footer,main等等。這樣使整個(gè)網(wǎng)站看起來(lái)就十分的龐大,當(dāng)我們?cè)诖蜷_網(wǎng)頁(yè)的時(shí)候,突然一下子把這些所有的組件加載上來(lái),這么多的請(qǐng)求全部同時(shí)開始請(qǐng)求,勢(shì)必會(huì)造成網(wǎng)頁(yè)打開很慢,使客戶得到的是非常差勁的體驗(yàn)。

在單頁(yè)應(yīng)用(SPA)中,如果沒有用懶加載,運(yùn)用webpack打包后的文件將會(huì)異常的大,造成進(jìn)入首頁(yè)時(shí),需要加載的內(nèi)容過(guò)多,延時(shí)過(guò)長(zhǎng),不利于用戶體驗(yàn),而運(yùn)用懶加載則可以將頁(yè)面進(jìn)行劃分,需要的時(shí)候加載頁(yè)面,可以有效的分擔(dān)首頁(yè)所承擔(dān)的加載壓力,減少首頁(yè)加載用時(shí)。

此時(shí)我們需要運(yùn)用到異步加載并緩存組件

什么是異步加載并緩存組件?

1、 異步加載組件:用不到的組件不會(huì)加載,因此網(wǎng)頁(yè)打開速度會(huì)很快,當(dāng)你用到這個(gè)組件的時(shí)候,才會(huì)通過(guò)異步請(qǐng)求進(jìn)行加載;

官方解釋:Vue允許將組件定義為一個(gè)異步解析(加載)組件定義的工廠函數(shù),即Vue只在實(shí)際需要渲染組件時(shí),才會(huì)觸發(fā)調(diào)用工廠函數(shù),并且將結(jié)果緩存起來(lái),用于將來(lái)再次渲染。

2、 組件緩存起來(lái):通過(guò)異步加載的組件會(huì)緩存起來(lái),當(dāng)你下一次再用到這個(gè)組件時(shí),絲毫不會(huì)有任何的疑遲,組件很快會(huì)從緩存中加載出來(lái)。

如何使用:

方法一:通過(guò)webpack2.0的按需加載

//1 全局:
 Vue.component('component-name',function(resolve){
 //require 語(yǔ)法告訴 webpack自動(dòng)將編譯后的代碼分割成不同的塊
 //這些塊將通過(guò) Ajax 請(qǐng)求自動(dòng)下載
   require(['./my-async-componnet'],resolve)
 })
 //注冊(cè)全局組件名,但只有一個(gè)名字,沒有實(shí)體,相當(dāng)于空的
//當(dāng)需要這個(gè)組件時(shí),調(diào)用上面的工廠函數(shù),觸發(fā)webpack的異步加載模塊方法
//然后異步請(qǐng)求一個(gè)模塊,請(qǐng)求成功后,這個(gè)模塊內(nèi)容即為組件實(shí)體部分,并對(duì)應(yīng)地方渲染,加載內(nèi)容也緩存下來(lái)。
//2 局部
 new Vue({
   components: {
        'component-name':function(resolve) {
           require(['./my-async-component'], resolve)
        }
   }
 })

方法二:通過(guò)webpack2+es2015返回一個(gè)promise(主流 )

//1 全局:
Vue.component('component-name',
 ()=> import('./my-async-componnet')//這個(gè) `import` 函數(shù)會(huì)返回一個(gè) `Promise` 對(duì)象,不要問我為什么,人家webpack這樣設(shè)計(jì)的。
 )
//2 局部:
 new Vue({
   components: {
       'component-name': () =>  import('./my-async-componnet')//這個(gè) `import` 函數(shù)會(huì)返回一個(gè) `Promise` 對(duì)象。
   }
 })

方法三:高級(jí)異步組件(可以處理加載狀態(tài))

常常用在路由中使用,vue 2.3.0+ 新增終極解決方案,要求路由2.4.0+

//工廠對(duì)象可以返回一個(gè)如下對(duì)象,對(duì)象里面的一些配置參數(shù)
const AsyncComponent = () => ({
  // 需要加載的組件 (這個(gè) `import` 函數(shù)會(huì)返回一個(gè) `Promise` 對(duì)象。)
  component: import('./MyComponent.vue'),
  // 異步組件加載時(shí)使用的組件
  loading: LoadingComponent,
  // 加載失敗時(shí)使用的組件
  error: ErrorComponent,
  // 展示加載時(shí)組件的延時(shí)時(shí)間。默認(rèn)值是 200 (毫秒)
  delay: 200,
  // 如果提供了超時(shí)時(shí)間且組件加載也超時(shí)了,
  // 則使用加載失敗時(shí)使用的組件。默認(rèn)值是:`Infinity`
  timeout: 3000
})

到此這篇關(guān)于Vue淺析講解動(dòng)態(tài)組件與緩存組件及異步組件的使用的文章就介紹到這了,更多相關(guān)Vue動(dòng)態(tài)組件 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)現(xiàn)彈出框內(nèi)嵌頁(yè)面展示并添加tab切換展示實(shí)時(shí)加載

    vue實(shí)現(xiàn)彈出框內(nèi)嵌頁(yè)面展示并添加tab切換展示實(shí)時(shí)加載

    彈窗效果是在Web開發(fā)中經(jīng)常用到的一種交互效果,這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)彈出框內(nèi)嵌頁(yè)面展示并添加tab切換展示實(shí)時(shí)加載的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • IE11下處理Promise及Vue的單項(xiàng)數(shù)據(jù)流問題

    IE11下處理Promise及Vue的單項(xiàng)數(shù)據(jù)流問題

    最近我開發(fā)的公司的競(jìng)賽網(wǎng)站被發(fā)現(xiàn)在IE11下排行榜無(wú)數(shù)據(jù),但是在其他瀏覽器沒問題,我然后打開控制臺(tái)一看,發(fā)現(xiàn)有問題,糾結(jié)了半天才搗騰好,下面小編把方案分享處理,供大家選擇
    2019-07-07
  • Ant Design Vue 添加區(qū)分中英文的長(zhǎng)度校驗(yàn)功能

    Ant Design Vue 添加區(qū)分中英文的長(zhǎng)度校驗(yàn)功能

    這篇文章主要介紹了Ant Design Vue 添加區(qū)分中英文的長(zhǎng)度校驗(yàn)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下功能,
    2020-01-01
  • vue3 組合式API defineEmits() 與 emits 組件選項(xiàng)詳解

    vue3 組合式API defineEmits() 與 emits 組

    在Vue中,defineEmits()是Vue3組合式API中用于聲明自定義事件的,而emits選項(xiàng)則用于Vue2和Vue3的選項(xiàng)式API中,defineEmits()允許使用字符串?dāng)?shù)組或?qū)ο笮问铰暶魇录?emits選項(xiàng)也支持這兩種形式,且驗(yàn)證函數(shù)可以驗(yàn)證事件參數(shù),這兩種方法都是為了更規(guī)范地在組件間通信
    2024-09-09
  • vue實(shí)現(xiàn)登錄數(shù)據(jù)的持久化的使用示例

    vue實(shí)現(xiàn)登錄數(shù)據(jù)的持久化的使用示例

    在Vue.js中,實(shí)現(xiàn)登錄數(shù)據(jù)的持久化需要使用瀏覽器提供的本地存儲(chǔ)功能,Vue.js支持使用localStorage和sessionStorage來(lái)實(shí)現(xiàn)本地存儲(chǔ),本文就來(lái)介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2023-10-10
  • Vue3進(jìn)階主題Composition API使用詳解

    Vue3進(jìn)階主題Composition API使用詳解

    這篇文章主要為大家介紹了Vue3進(jìn)階主題Composition API使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Vue中引用assets中圖片的實(shí)現(xiàn)方式

    Vue中引用assets中圖片的實(shí)現(xiàn)方式

    這篇文章主要介紹了Vue中引用assets中圖片的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • axios請(qǐng)求中斷的幾種方法

    axios請(qǐng)求中斷的幾種方法

    在實(shí)際應(yīng)用場(chǎng)景中,假如有一個(gè)下載或者導(dǎo)出請(qǐng)求,數(shù)據(jù)量非常大的情況下,接口響應(yīng)的會(huì)很慢,這時(shí)候我我們想中斷請(qǐng)求,該怎么做呢?本文給大家介紹了axios請(qǐng)求中斷的幾種方法,需要的朋友可以參考下
    2024-10-10
  • vue路由--網(wǎng)站導(dǎo)航功能詳解

    vue路由--網(wǎng)站導(dǎo)航功能詳解

    這篇文章主要介紹了vue路由--網(wǎng)站導(dǎo)航功能詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue 使用moment獲取當(dāng)前時(shí)間及一月前的時(shí)間

    vue 使用moment獲取當(dāng)前時(shí)間及一月前的時(shí)間

    開發(fā)中會(huì)有要獲取當(dāng)前日期的需求,有的是獲取到當(dāng)前月份,本文就介紹了vue獲取當(dāng)前日期時(shí)間(moment、new?Date()),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-08-08

最新評(píng)論