美文网首页
Vue 动态组件与v-once指令

Vue 动态组件与v-once指令

作者: 云凡的云凡 | 来源:发表于2020-10-13 21:18 被阅读0次

    我们要的效果:点击change按钮可以切换展示组件


    image.png
    1.没有用动态组件的写法
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>18动态组件与v-once指令.html</title>
        <script src="./vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <child-one v-if="show==='child-one'"></child-one>
            <child-two v-if="show==='child-two'"></child-two>
            <button @click="handleBtnClick">change</button>
        </div>
        <script>
            Vue.component('child-one', {
                template: '<div>child-one</div>'
            })
            Vue.component('child-two', {
                template: '<div>child-two</div>'
            })
            var vm = new Vue({
                el: '#app',
                data: {
                    show: 'child-one'
                },
                methods: {
                    handleBtnClick: function () {
                        this.show = (this.show === 'child-one' ? 'child-two' : 'child-one')
                    }
                },
            })
        </script>
    </body>
    
    </html>
    
    2.用动态组件的写法
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>18动态组件与v-once指令.html</title>
        <script src="./vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- component 是Vue自带的组件 :会根据is里面数据的变化自动的加载不同的组件-->
            <component :is="show"></component>
            <!-- <child-one v-if="show==='child-one'"></child-one>
            <child-two v-if="show==='child-two'"></child-two> -->
            <button @click="handleBtnClick">change</button>
        </div>
        <script>
            Vue.component('child-one', {
                template: '<div>child-one</div>'
            })
            Vue.component('child-two', {
                template: '<div>child-two</div>'
            })
            var vm = new Vue({
                el: '#app',
                data: {
                    show: 'child-one'
                },
                methods: {
                    handleBtnClick: function () {
                        this.show = (this.show === 'child-one' ? 'child-two' : 'child-one')
                    }
                },
            })
        </script>
    </body>
    
    </html>
    
    3.给组件添加 v-once,有效的提高一些静态内容的展示
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>18动态组件与v-once指令.html</title>
        <script src="./vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- component 是Vue自带的组件 :会根据is里面数据的变化自动的加载不同的组件-->
            <!-- <component :is="show"></component> -->
            <child-one v-if="show==='child-one'"></child-one>
            <child-two v-if="show==='child-two'"></child-two>
            <button @click="handleBtnClick">change</button>
        </div>
        <script>
            Vue.component('child-one', {
                //  如果不写 v-once ,每一次切换的时候,底层都需要创建一个组件,销毁一个组件,耗费性能 
                // 给组件添加v-once指令,当组件第一次渲染的时候,直接就会放内存里,当第二次渲染时,并不需要重新创建一个组件,而是从内存直接拿出以前的组件就可以了,性能会更高一些。
                template: '<div v-once>child-one</div>'
            })
            Vue.component('child-two', {
                template: '<div v-once>child-two</div>'
            })
            var vm = new Vue({
                el: '#app',
                data: {
                    show: 'child-one'
                },
                methods: {
                    handleBtnClick: function () {
                        this.show = (this.show === 'child-one' ? 'child-two' : 'child-one')
                    }
                },
            })
        </script>
    </body>
    
    </html>
    

    相关文章

      网友评论

          本文标题:Vue 动态组件与v-once指令

          本文链接:https://www.haomeiwen.com/subject/rzsbpktx.html