首页 文章

Vue.Js中的选项卡式导航

提问于
浏览
2

我正在尝试使用Vue创建一个基本的选项卡式导航系统 . 我正在捕获用户的导航选择并调用更改某些数据的函数 . 该数据最终将决定哪个选项卡应该是活动的 . 到目前为止我有这个:

HTML

<div id="app">
    <div id="nav">
        <a href='#' class="tab" v-on:click="makeActive('homeActive')">Home</a>
        <a href='#' class="tab" v-on:click="makeActive('infoActive')">Info</a>
    </div>
    <div class="content">
        <div class="boxes" id="home" v-bind:class="choice">
        </div>
        <div class="boxes" id="info" v-bind:class="choice">
        </div>
    </div>
</div>

Vue

new Vue({
    el: '#app',
    data: {
        choice: 'homeActive' // Home is chosen by default
    },
    methods: {
        makeActive: function(val) {
            this.choice = val;
        }
    }
});

目前,如果用户点击Home链接,home和info div都会获得homeActive类,这是因为我无法通过这个基本逻辑使用我的方法返回两个语句:

enable tab1 & disable tab2 || enable tab 2 & disable tab1

我正在尝试不同的方法,但由于将我的内容绑定到单个类,因此我只能使用调用方法影响单个状态 .

关于如何使用Vue的任何建议?

1 回答

  • 9

    我通常解决这个问题的方法是添加另一个函数 isActiveTab ,就像这样......

    new Vue({
        el: '#app',
        data: {
            choice: 'homeActive' // Home is chosen by default
        },
        methods: {
            makeActive: function(val) {
                this.choice = val;
            },
            isActiveTab: function(val) {
              return this.choice === val;
            }
        }
    });
    

    那么在你看来......

    <div id="app">
        <div id="nav">
            <a href='#' class="tab" v-on:click="makeActive('homeActive')">Home</a>
            <a href='#' class="tab" v-on:click="makeActive('infoActive')">Info</a>
        </div>
        <div class="content">
            <div class="boxes" id="home" v-show="isActiveTab('homeActive')">
            </div>
            <div class="boxes" id="info" v-show="isActiveTab('infoActive')">
            </div>
        </div>
    </div>
    

相关问题