手把手教你VUE从入门到放弃—— 篇二十(动态组件与v-once指令)

使用v-if 实现如下功能,有俩控件,跟一个按钮,默认显示其中一个控件,点击按钮显示另一个

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue中的插槽与具名插槽</title>
      <script src="vue.js"></script>
</head>
<body>
    <div id = 'app2'>
        <child-one v-if="type === 'child-one'"></child-one>
        <child-two v-if="type === 'child-two'"></child-two>
        <button type="button" @click="handleBtnClick">change</button>
    </div>
    <script>
        Vue.component('child-one',{
            template:'<b > child-one </b>'
        });
        Vue.component('child-two',{
            template:'<b > child-two </b>'
        });
        
        var app = new Vue({
            el:'#app2',
            data:{
                type:'child-one'
            },
            methods:{
                handleBtnClick:function(){
                    this.type = this.type == 'child-one'?'child-two':'child-one'
                }
            }
        });
            
        
    </script>
</body>
</html>

使用动态组件实现上面功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue中的插槽与具名插槽</title>
      <script src="vue.js"></script>
</head>
<body>
    <div id = 'app2'>
        <component :is='type'></component>
        <!-- <child-one v-if="type === 'child-one'"></child-one>
        <child-two v-if="type === 'child-two'"></child-two> -->
        <button type="button" @click="handleBtnClick">change</button>
    </div>
    <script>
        Vue.component('child-one',{
            template:'<b > child-one </b>'
        });
        Vue.component('child-two',{
            template:'<b > child-two </b>'
        });
        
        var app = new Vue({
            el:'#app2',
            data:{
                type:'child-one'
            },
            methods:{
                handleBtnClick:function(){
                    this.type = this.type == 'child-one'?'child-two':'child-one'
                }
            }
        });
            
        
    </script>
</body>
</html>

使用v-once进行优化

以上功能当显示一个组件时会销毁另一个组件,此时我们加入v-once会在初次使用组件时将组件加入缓存

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue中的插槽与具名插槽</title>
      <script src="vue.js"></script>
</head>
<body>
    <div id = 'app2'>
        <component :is='type'></component>
        <!-- <child-one v-if="type === 'child-one'"></child-one>
        <child-two v-if="type === 'child-two'"></child-two> -->
        <button type="button" @click="handleBtnClick">change</button>
    </div>
    <script>
        Vue.component('child-one',{
            template:'<b v-once> child-one </b>'
        });
        Vue.component('child-two',{
            template:'<b v-once> child-two </b>'
        });
        
        var app = new Vue({
            el:'#app2',
            data:{
                type:'child-one'
            },
            methods:{
                handleBtnClick:function(){
                    this.type = this.type == 'child-one'?'child-two':'child-one'
                }
            }
        });
            
        
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我才是真的封不觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值