【问题标题】:Vuejs show tab content on clickVuejs在点击时显示标签内容
【发布时间】:2018-03-09 21:41:15
【问题描述】:

我的 vuejs 代码有问题,我想在每次单击选项卡时显示特定内容。

这是我目前的代码。

<template>
  <nav class="horizontal top-border block-section">
    <div class="col-md-20" id="tabs">
       <a href="#" id="overview" class="col-md-2" @click="active">Overview</a>
       <a href="#" id="aboutcompany" class="col-md-2" @click="active">About Company</a>
  </nav>

    <div id="over" class="show">
        <overview></overview>
    </div>
    <div id="about" class="hide">
        <about-company></about-company>
    </div>

</template>

<script>
import Overview from './Overview'
import AboutCompany from './AboutCompany'

export default {
  components: {
  Overview,
  AboutCompany
},
methods: {
  active(e) {
     e.target.id.addClass('show');
  }
}
}
</script>

单击 id="aboutcompany" 的 href 后,id="about" 的 div 应该有一个类“show”,并为 id="overview" 的 div 添加类“hide”

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    您可以更多地利用 vuejs 提供的功能:

    <template>
      <nav class="horizontal top-border block-section">
        <div class="col-md-20" id="tabs">
          <a href="#" v-for="tab in tabs" @click.prevent="setActiveTabName(tab.name)">
            {{ tab.displayName }}
          </a>
      </nav>
    
      <div v-if="displayContents(activeTabName, 'overview')">
          <overview></overview>
      </div>
      <div v-if="displayContents(activeTabName, 'about')">
          <about-company></about-company>
      </div>
    </template>
    
    <script>
    import Overview from './Overview'
    import AboutCompany from './AboutCompany'
    
    export default {
      components: {
      Overview,
      AboutCompany
      },
      data() {
        return {
          // List here all available tabs
          tabs: [
            {
              name: 'overview',
              displayName: 'Company Overview',
            },
            {
              name: 'about',
              displayName: 'About us',
            }
          ],
          activeTabName: null,
        };
      },
      mounted() {
        // The currently active tab, init as the 1st item in the tabs array
        this.activeTabName = this.tabs[0].name;
      },
      methods: {
        setActiveTabName(name) {
          this.activeTabName = name;
        },
        displayContents(name) {
          return this.activeTabName === name;
        },
      },
    }
    </script>
    

    【讨论】:

    • 对此有误。错误是“'tabs' is not defined”“activeTabName: tabs[0].name”
    【解决方案2】:

    您可以使用data 变量来实现此目的,而无需使用单独的function 调用。

      <nav class="horizontal top-border block-section">
        <div class="col-md-20" id="tabs">
           <a href="#" id="overview" class="col-md-2" @click="activeTab = 'OVER'">Overview</a>
           <a href="#" id="aboutcompany" class="col-md-2" @click="activeTab = 'ABOUT'">About Company</a>
      </nav>
    
        <div id="over" class="{show : activeTab == 'OVER', hide : activeTab != 'OVER'}">
            <overview></overview>
        </div>
        <div id="about" class="{show : activeTab == 'ABOUT', hide : activeTab != 'ABOUT'}">
            <about-company></about-company>
        </div>
    

    然后在数据对象中定义activeTab

    data: function () {
      return {
        activeTab: "OVER"
      }
    }
    

    【讨论】:

    • 如果我有两个以上的选择怎么办?需要一个一个设置还是有更简单的方法?
    • 功能也应该反过来
    • 这些代码出现了一些错误eslint.org/docs/rules/func-names Unexpected unnamed function document.getElementByClassName('tab').forEach(function(tab){ and eslint.org/docs/rules/no-param-reassign Assignment to property of function parameter 'tab' tab .className = '标签隐藏';
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多