Vue动态组件与v-once指令

1、动态组件

动态组件可以实现组件之间的切换,先看一个不使用动态组件实现组件切换显示的例子

<div id="root">
        <child-one v-if="type==='child-one'"></child-one>
        <child-two v-if="type==='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: '#root',
            data:{
                type: 'child-one'
            },
            methods: {
                handleBtnClick: function () {
                    this.type=(this.type==='child-one'?'child-two':'child-one');
                }
            }
        })
    </script>

结果展示: 

 

 使用动态组件:绑定is特性来切换不同的组件,如下例

<div id="root">
        <component :is="type"></component> <!--使用动态组件-->
        <!--<child-one v-if="type==='child-one'"></child-one>-->
        <!--<child-two v-if="type==='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: '#root',
            data:{
                type: 'child-one'
            },
            methods: {
                handleBtnClick: function () {
                    this.type=(this.type==='child-one'?'child-two':'child-one');
                }
            }
        })
    </script>

结果展示: 

2、v-once

不需要表达式

 渲染普通的 HTML 元素在 Vue 中是非常快速的,但有的时候你可能有一个组件,这个组件包含了大量静态内容。在这种情况下,你可以在根元素上添加 v-once 特性以确保这些内容只计算一次然后缓存起来。即只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。

上例可以修改为:

扫描二维码关注公众号,回复: 12431479 查看本文章
<div id="root">
        <component :is="type"></component>        
        <button @click="handleBtnClick">change</button>
    </div>
    <script>
        Vue.component('child-one',{
            template: '<div v-once>child-one</div>'<--!使用v-once指令,优化性能>
        })
        Vue.component('child-two',{
            template:'<div v-once>child-two</div>'<--!使用v-once指令,优化性能>
        })
        var vm=new Vue({
            el: '#root',
            data:{
                type: 'child-one'
            },
            methods: {
                handleBtnClick: function () {
                    this.type=(this.type==='child-one'?'child-two':'child-one');
                }
            }
        })
    </script>

猜你喜欢

转载自blog.csdn.net/willard_cui/article/details/82533921