文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Vue动态组件与异步组件超详细讲解

2023-03-19 17:33

关注

何为动态组件

动态组件是根据数据的变化,可以随时切换不同的组件,比如咱们现在要展示一个文本框和输入框,我们想要根据我们data中定义的值去决定是显示文本框还是输入框,如果用以前学的知识去做的话就是使用v-show的方式去做,虽然也能实现,但是比较复杂,代码也多了很多,这时候用动态组件能很好的解决这个问题

何为异步组件

异步组件可以以异步的方式加载组件,实际项目中我们可以把大型的项目拆分成许多小js文件,等使用时再组合,而且可以实现懒加载,有些组件暂时不需要展示给用户的我们可以等用户看到时再加载进来。

示例解析

动态组件

展示一个输入框或者文本,通过一个按钮,点击后可以切换展示,比如当前展示文本,点击按钮就会变为展示输入框,代码如下:

首先我们先定义两个组件,一个展示输入框,一个展示文本

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

定义一个currentItem变量用于控制组件的展示

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

使用组件时使用component关键字 ,然后使用:is = "显示具体组件的依赖数据(本例子中时currentItem)"的方式动态加载组件

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

keep-alive:组件切换时在组件中的值会被清掉,比如输入框中的值,所以需要使用keep-alive来防止值被清理

定义点击按钮后执行的方法,这个方法就是改变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>动态组件</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>

异步组件

假如我们要展示一个文本,这个文本不会马上展示,而是4秒后再展示

首先定义两个组件,一个同步组件,一个异步组件

定义同步组件

 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>`
    })
    // 异步组件:可以通过异步组件的方式动态加载组件,可以把大型项目拆分成许多的小js 文件,使用时再组合
    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>

总结

本文主要是简单介绍了动态组件和异步组件的定义及使用的方法,动态组件是可以让我们使用者通过一定的条件决定展示哪个组件,而异步组件可以让我们实现组件懒加载的功能,使大型项目可以拆成许多小js文件,使用时再组合,非常方便

到此这篇关于Vue动态组件与异步组件超详细讲解的文章就介绍到这了,更多相关Vue动态组件与异步组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯