最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue動(dòng)態(tài)組件與異步組件超詳細(xì)講解

 更新時(shí)間:2023年03月16日 09:17:42   作者:時(shí)光劍客  
這篇文章主要介紹了Vue動(dòng)態(tài)組件與異步組件,動(dòng)態(tài)組件是根據(jù)數(shù)據(jù)的變化,可以隨時(shí)切換不同的組件,比如咱們現(xiàn)在要展示一個(gè)文本框和輸入框,我們想要根據(jù)我們data中定義的值去決定是顯示文本框還是輸入框

何為動(dòng)態(tài)組件

動(dòng)態(tài)組件是根據(jù)數(shù)據(jù)的變化,可以隨時(shí)切換不同的組件,比如咱們現(xiàn)在要展示一個(gè)文本框和輸入框,我們想要根據(jù)我們data中定義的值去決定是顯示文本框還是輸入框,如果用以前學(xué)的知識(shí)去做的話就是使用v-show的方式去做,雖然也能實(shí)現(xiàn),但是比較復(fù)雜,代碼也多了很多,這時(shí)候用動(dòng)態(tài)組件能很好的解決這個(gè)問題

何為異步組件

異步組件可以以異步的方式加載組件,實(shí)際項(xiàng)目中我們可以把大型的項(xiàng)目拆分成許多小js文件,等使用時(shí)再組合,而且可以實(shí)現(xiàn)懶加載,有些組件暫時(shí)不需要展示給用戶的我們可以等用戶看到時(shí)再加載進(jìn)來。

示例解析

動(dòng)態(tài)組件

展示一個(gè)輸入框或者文本,通過一個(gè)按鈕,點(diǎn)擊后可以切換展示,比如當(dāng)前展示文本,點(diǎn)擊按鈕就會(huì)變?yōu)檎故据斎肟?,代碼如下:

首先我們先定義兩個(gè)組件,一個(gè)展示輸入框,一個(gè)展示文本

  app.component('input-item',{
        template:`
            <input />
           `
    });
    app.component('common-item',{
        template:`<div>hello world</div>`
    });

定義一個(gè)currentItem變量用于控制組件的展示

data() {
        return {
            currentItem: 'input-item'
        }
    },

使用組件時(shí)使用component關(guān)鍵字 ,然后使用:is = "顯示具體組件的依賴數(shù)據(jù)(本例子中時(shí)currentItem)"的方式動(dòng)態(tài)加載組件

  template: 
        `
        <keep-alive>
        <component :is="currentItem"/>
        </keep-alive>
        <button @click="handleClick">switch</button>
        `

keep-alive:組件切換時(shí)在組件中的值會(huì)被清掉,比如輸入框中的值,所以需要使用keep-alive來防止值被清理

定義點(diǎn)擊按鈕后執(zhí)行的方法,這個(gè)方法就是改變current Item的值,讓其顯示不同的組件

 methods: {
        handleClick(){
            if(this.currentItem === 'input-item'){
                this.currentItem = 'common-item';
            }else{
                this.currentItem = 'input-item';
            }
        }
    }

所有代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>動(dòng)態(tài)組件</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
</body>
<script>
 const app = Vue.createApp({
    data() {
        return {
            currentItem: 'input-item'
        }
    },
    methods: {
        handleClick(){
            if(this.currentItem === 'input-item'){
                this.currentItem = 'common-item';
            }else{
                this.currentItem = 'input-item';
            }
        }
    },
        template: 
        `
        <keep-alive>
        <component :is="currentItem"/>
        </keep-alive>
        <button @click="handleClick">switch</button>
        `
    });
    app.component('input-item',{
        template:`
            <input />
           `
    });
    app.component('common-item',{
        template:`<div>hello world</div>`
    });
    const vm = app.mount('#root');
</script>
</html>

異步組件

假如我們要展示一個(gè)文本,這個(gè)文本不會(huì)馬上展示,而是4秒后再展示

首先定義兩個(gè)組件,一個(gè)同步組件,一個(gè)異步組件

定義同步組件

 app.component('common-item',{
        template:`<div>hello world</div>`
    })

定義異步組件,使用Vue.defineAsyncComponent定義異步組件

 app.component('async-common-item',
 Vue.defineAsyncComponent(()=>{
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve({
                    template:`<div>this is an async component</div>`
                })
            },4000)  
        })
    }));

使用組件

 const app = Vue.createApp({
        template: 
        `
        <div>
            <common-item />
            <async-common-item />
        </div>
        `
    });

全部代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>異步組件</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
</body>
<script>
 const app = Vue.createApp({
        template: 
        `
        <div>
            <common-item />
            <async-common-item />
        </div>
        `
    });
    app.component('common-item',{
        template:`<div>hello world</div>`
    })
    // 異步組件:可以通過異步組件的方式動(dòng)態(tài)加載組件,可以把大型項(xiàng)目拆分成許多的小js 文件,使用時(shí)再組合
    app.component('async-common-item',
        Vue.defineAsyncComponent(()=>{
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve({
                    template:`<div>this is an async component</div>`
                })
            },4000)        
        })
    }));
    const vm = app.mount('#root');
</script>
</html>

總結(jié)

本文主要是簡(jiǎn)單介紹了動(dòng)態(tài)組件和異步組件的定義及使用的方法,動(dòng)態(tài)組件是可以讓我們使用者通過一定的條件決定展示哪個(gè)組件,而異步組件可以讓我們實(shí)現(xiàn)組件懶加載的功能,使大型項(xiàng)目可以拆成許多小js文件,使用時(shí)再組合,非常方便

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

相關(guān)文章

  • vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端

    vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端

    這篇文章主要為大家詳細(xì)介紹了vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • vue3.0 子組件如何修改父組件傳遞過來的值

    vue3.0 子組件如何修改父組件傳遞過來的值

    這篇文章主要介紹了vue3.0 子組件如何修改父組件傳遞過來的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 使用idea創(chuàng)建vue項(xiàng)目的圖文教程

    使用idea創(chuàng)建vue項(xiàng)目的圖文教程

    Vue.js是一套構(gòu)建用戶界面的框架,只關(guān)注視圖層,它不僅易于上手,還便于與第三方庫或既有項(xiàng)目整合,下面這篇文章主要給大家介紹了關(guān)于使用idea創(chuàng)建vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue中利用mqtt服務(wù)端實(shí)現(xiàn)即時(shí)通訊的步驟記錄

    vue中利用mqtt服務(wù)端實(shí)現(xiàn)即時(shí)通訊的步驟記錄

    前些日子了解到mqtt這樣一個(gè)協(xié)議,可以在web上達(dá)到即時(shí)通訊的效果,所以下面這篇文章主要給大家介紹了關(guān)于vue中如何利用mqtt服務(wù)端實(shí)現(xiàn)即時(shí)通訊的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Vue折疊面板組件的封裝

    Vue折疊面板組件的封裝

    這篇文章主要為大家詳細(xì)介紹了Vue折疊面板組件的封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 應(yīng)用provide與inject刷新Vue頁面方法

    應(yīng)用provide與inject刷新Vue頁面方法

    這篇文章主要介紹了應(yīng)用provide與inject刷新Vue頁面的兩種方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,多多進(jìn)步,祝大家早日升職加薪
    2021-09-09
  • vue實(shí)現(xiàn)自動(dòng)滑動(dòng)輪播圖片

    vue實(shí)現(xiàn)自動(dòng)滑動(dòng)輪播圖片

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)自動(dòng)滑動(dòng)輪播圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue3自定義指令實(shí)現(xiàn)按鈕防抖示例詳解

    vue3自定義指令實(shí)現(xiàn)按鈕防抖示例詳解

    這篇文章主要為大家介紹了vue3自定義指令實(shí)現(xiàn)按鈕防抖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • vue2.0 循環(huán)遍歷加載不同圖片的方法

    vue2.0 循環(huán)遍歷加載不同圖片的方法

    下面小編就為大家分享一篇vue2.0 循環(huán)遍歷加載不同圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 在vue項(xiàng)目中使用Nprogress.js進(jìn)度條的方法

    在vue項(xiàng)目中使用Nprogress.js進(jìn)度條的方法

    NProgress.js是輕量級(jí)的進(jìn)度條組件,使用簡(jiǎn)便,可以很方便集成到單頁面應(yīng)用中。這篇文章主要介紹了在vue項(xiàng)目中使用Nprogress.js進(jìn)度條的方法,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

博客| 二连浩特市| 台中县| 防城港市| 葵青区| 永寿县| 伊金霍洛旗| 龙门县| 石城县| 会理县| 光泽县| 涞水县| 驻马店市| 武安市| 微山县| 嘉义市| 乌拉特后旗| 保德县| 文昌市| 大宁县| 哈尔滨市| 东乌珠穆沁旗| 台山市| 河东区| 大姚县| 丰县| 民勤县| 南平市| 饶平县| 百色市| 海南省| 延川县| 宁陕县| 二连浩特市| 恭城| 吴旗县| 安乡县| 锡林郭勒盟| 高碑店市| 泽普县| 淮阳县|