Vue的is属性

83 篇文章 3 订阅

我们看一个切换标签的例子:

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dynamic Components Example动态组件</title>
    <script src="../vue202012/vue.js"></script>
    <style>
        .tab-button {
            padding: 6px 10px;
            border-top-left-radius: 3px;
            border-top-right-radius: 3px;
            border: 1px solid #ccc;
            cursor: pointer;
            background: #f0f0f0;
            margin-bottom: -1px;
            margin-right: -1px;
        }

        .tab-button:hover {
            background: #e0e0e0;
        }

        .tab-button.active {
            background: #e0e0e0;
        }

        .tab {
            border: 2px solid #ccc;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div id="dynamic" class="demo">
        <button
            v-for="tab in tabs"
            v-bind:key="tab"
            v-bind:class="['tab-button',{active:tab === currentTab}]"
            v-on:click="currentTab = tab"
        >
            {{ tab }}
        </button>
        <component v-bind:is="currentTabComponent" class="tab"></component>
    </div>
    <script>
        Vue.component('tab-home',{
            template:"<div>Home Component</div>"
        });
        Vue.component('tab-posts',{
            template:"<div>Posts Component</div>"
        });
        Vue.component('tab-info',{
            template:"<div>Info Component</div>"
        });
        new Vue({
            el:'#dynamic',
            data:{
                currentTab:'Home',
                tabs:['Home','Posts','Info']
            },
            computed:{
                currentTabComponent:function(){
                    return "tab-" + this.currentTab.toLowerCase()
                }
            }
        })
    </script>
</body>

效果如下:
在这里插入图片描述
在这里插入图片描述
这里红框里面的代码,v-bind出现的时候,就会在vue实例的data里面去寻找值,这里我们用的不是data中的值,而是computed里面的函数动态返回值

比如我们点击第二个按钮的时候,currentTab就被设置成了字符串Posts
所以此时currentTabComponent计算的结果就是字符串tab-posts,相当于此时的代码是这样的:

<component v-bind:is="'tab-posts'" class="tab"></component>

注意这里的'tab-posts'外面的''不可以去掉

通过'tab-posts'找到了注册的全局组件'tab-posts',就可以用这个全局组件替换掉这里的<component></component>

参考资料:

  1. vue的is和v-bind怎么用
  2. Vue组件基础
  3. 切换标签案例
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值