Vue动态组件和异步组件


Vue动态组件和异步组件

动态组件和异步组件的简单使用


一、动态组件

使用标签<component v-bind:is="nxShow"></component>
Vue提供的动态组件的标签component
会根据:is="nxShow"中的nxShow的值自己寻找组件,
即省略了写方法的那步

在使用时,一般结合<keep-alive></keep-alive>标签,让标签切换后留有缓存
自己写的例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动态组件</title>
</head>
<body>
    <div id="app">

    </div>
    <script src="js/vue.js"></script>
    <script>
        const app = Vue.createApp({
    
    
            data(){
    
    
                return{
    
    
                    msg:'动态组件如下(v-show的方法展示)',
                    nxShow:'nx-btn'
                }
            },
            methods:{
    
    
                change(){
    
    
                    this.nxShow = this.nxShow==='nx-btn'?'nx-input':'nx-btn';
                },
                btnFun(item){
    
    
                    this.msg = item;
                }
            },
            template:`
                <div>
                    <h3>这里换了个写法,把内容不放在上面了div里了,放在template里,作用是一样的</h3>
                    <h3>{
     
     {msg}}</h3>
                </div>

                <div>
                    <nx-btn v-show="nxShow==='nx-btn'" v-on:btn-click="btnFun"></nx-btn>

                    <nx-input v-show="nxShow==='nx-input'"></nx-input>
                    <p>-------------</p>
                    <h3>Vue提供的动态组件的标签component
                      会根据:is="nxShow"中的nxShow的值自己寻找组件,
                      即省略了写方法的那步
                    </h3>
                    <h3>但是这样组件不会缓存,切换后内容消失得使用keep-alive标签,才能有缓存</h3>
                    <keep-alive>
                        <component v-bind:is="nxShow" v-on:btn-click="btnFun"></component>
                    </keep-alive>

                    <p>-------------</p>
                    <button v-on:click="change">切换显示</button>
                </div>

            `
        });
        /*这里复习一下全局组件的写法:1、创建实例;2、注册组件;3、挂在实例*/
        app.component('nxBtn',{
    
    
            methods: {
    
    
                btnClick(){
    
    
                    /*这里复习了子传父的方法,实现了子组件修改父组件中的内容*/
                    this.$emit('btnClick','你点击了子组件');
                }
            },
            template: `
                <button v-on:click="btnClick">点我跳转</button>
            `
        });
        app.component('nxInput',{
    
    
            template:`
                <input type="text">
            `
        });

        app.mount("#app");
    </script>
</body>
</html>

运行演示:
(分割线上是v-show实现,分割线下是vue标签实现

<keep-alive>
        <component v-bind:is="nxShow" v-on:btn-click="btnFun"></component>
 </keep-alive>

在这里插入图片描述
点击切换显示
在这里插入图片描述
输入后的内容,在组件切换后会保留缓存内容
在这里插入图片描述

二、异步组件

使用这个来写Vue.defineAsyncComponent(()=>{})

Vue.defineAsyncComponent()=>{
    
    
           return new Promise((resolve, reject)=>{
    
    
           })
         }

代码如下(示例):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>异步组件</title>
</head>
<body>
    <div id="app">
        <async-items></async-items>
    </div>
    <script src="js/vue.js"></script>
    <script>
        const app = Vue.createApp({
    
    
            data(){
    
    
                return{
    
    
                    msg:'基础模板'
                }
            }
        });
        /*
        *注册一个全局异步组件
        *使用Vue.defineAsyncComponent()=>{
        *   return new Promise((resolve, reject)=>{
        *   })
        * }
        * 来写
        *
        * Promise((resolve,reject)=>{})解决js中多个异步回调难以维护和控制问题
        * setTimeout(()=>{},3000)让前面的内容延时3秒再运行
        * */
        app.component('async-items',Vue.defineAsyncComponent(()=>{
    
    
            return new Promise((resolve, reject)=>{
    
    
                setTimeout(()=>{
    
    
                    resolve({
    
    
                        template:`
                            <div style="background-color: mediumpurple;height: 200px;width: 200px">从服务端请求的异步组件</div>
                        `
                    })
                },3000)
            })
        }));

        app.mount("#app");
    </script>
</body>
</html>

运行效果:
在这里插入图片描述
三秒后
在这里插入图片描述


总结

整理了,自己学习vue时,对动态组件和异步组件的总结

猜你喜欢

转载自blog.csdn.net/qq_51603875/article/details/125567624