vue.js tab 组件

2019年05月04日 10:49:57阅读数:706博客 / 沈斌的博客 / Vue.js

index.html

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.4/css/bulma.min.css">
    <title>Tabs</title>
</head>
<body>
    <div id="app">
       <tabs>
           <tab name="About us" :selected="true">
               <h1>here is the content for about us</h1>
           </tab>

           <tab name="About culture">
                <h1>here is the content for about culture</h1>
            </tab>

            <tab name="About vision">
                <h1>here is the content for about vision</h1>
            </tab>
       </tabs>
    </div>

    <script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
    <script src="main.js"></script>
    
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

main.js

实例

Vue.component('tabs',{
    template:`
    <div>
        <div class="tabs">
            <ul>
                <li v-for="tab in tabs" :class="{'is-active': tab.isActive}">
                    <a href="#" @click="selectTab(tab)">{{ tab.name }}</a>
                </li>
            </ul>
        </div>

        <div class="tabs-details">
            <slot></slot>
        </div>
    </div>
    `,

    data(){
        return{
            tabs:[]
        }
    },
    created(){
        // console.log(this.$children);
        this.tabs = this.$children;
    },

    methods:{
        selectTab(selectedTab){
            this.tabs.forEach(tab=>{
                tab.isActive = (tab.name == selectedTab.name);
            });
        }
    }
});

Vue.component('tab',{
    template:`
        <div v-show="isActive"><slot></slot></div>
    `,

    props:{
        name:{required:true},
        selected:{default:false}
    },

    data(){
        return{
            isActive:false
        }
        
    },

    mounted(){
        this.isActive = this.selected;
    }
    
});
new Vue({
    el:'#app',

});

运行实例 »

点击 "运行实例" 按钮查看在线实例


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    沈斌的博客
    博文
    56
    粉丝
    3
    评论
    1
    访问量
    42425
    积分:0
    P豆:417