VUE的tab页面切换的四种方法

yizhihongxing

VUE 是一款流行的 JavaScript 前端框架,用于构建交互式用户界面。在 VUE 中,tab 页面切换是常见的功能,以下是 VUE 中实现 tab 切换的四种方法的完整攻略。

1. 标准的 VUE 动态组件方法

我们可以使用标准的 VUE 动态组件方法,在模板中设置一个变量,然后根据变量的值确定要显示的组件。这种方法需要我们在 VUE 组件中定义所有的 tab 页面组件。

首先,我们需要在父组件中定义一个变量来指定显示哪个子组件。然后,使用 VUE 的 component 标签来渲染子组件。

示例代码:

<template>
  <div class="tab-container">
    <div class="tab-header">
      <div class="tab-item" v-for="(tab, index) in tabs" :key="index" @click="selectedTab = index">{{ tab }}</div>
    </div>
    <div class="tab-body">
      <component :is="selectedTabComponent"></component>
    </div>
  </div>
</template>

<script>
import Tab1 from './Tab1.vue'
import Tab2 from './Tab2.vue'
import Tab3 from './Tab3.vue'

export default {
  name: 'TabContainer',
  data() {
    return {
      tabs: ['Tab 1', 'Tab 2', 'Tab 3'],
      selectedTab: 0,
    }
  },
  computed: {
    selectedTabComponent() {
      switch (this.selectedTab) {
        case 0:
          return Tab1
        case 1:
          return Tab2
        case 2:
          return Tab3
        default:
          return Tab1
      }
    }
  },
}
</script>

这个例子中,有三个子组件 Tab1Tab2Tab3,在父组件中根据 selectedTab 变量来确定显示哪个组件。在 computed 中使用 switch 语句根据 selectedTab 的值返回相应的组件。

2. 使用 VUE-ROUTER 实现

另一种常见的实现 tab 页面切换的方法是使用 vue-router 。在这种方法中,每个 tab 页面对应一个路由,切换 tab 时改变路由就可以了。

首先,我们需要在路由器中定义子路由。

const router = new VueRouter({
  routes: [
    {
      path: '/',
      component: Main,
      children: [
        {
          path: 'tab1',
          component: Tab1
        },
        {
          path: 'tab2',
          component: Tab2
        },
        {
          path: 'tab3',
          component: Tab3
        }
      ]
    }
  ]
});

在父组件中,我们需要添加router-view标签以展示子路由内容,同时也需要添加页面导航菜单。

<div class="tab-container">
  <div class="tab-header">
    <router-link to="/tab1" class="tab-item">Tab 1</router-link>
    <router-link to="/tab2" class="tab-item">Tab 2</router-link>
    <router-link to="/tab3" class="tab-item">Tab 3</router-link>
  </div>
  <div class="tab-body">
    <router-view></router-view>
  </div>
</div>

以上代码中,每个 router-link 标签都会将用户导向到相应的子路由页面。子路由页面将通过 router-view 标签进行渲染。

3. 使用 ELEMENT-UI 的 Tabs 组件

如果你在你的 VUE 项目中使用了 ELEMENT-UI 的组件库,你也可以很方便的使用 Tabs 组件来实现 tab 页面切换。如下:

<template>
  <div class="tab-container">
    <el-tabs v-model="activeName" @tab-click="handleClick">
      <el-tab-pane label="Tab 1" v-if="activeName === 'tab1'">
        <p>Tab 1 content</p>
      </el-tab-pane>
      <el-tab-pane label="Tab 2" v-if="activeName === 'tab2'">
        <p>Tab 2 content</p>
      </el-tab-pane>
      <el-tab-pane label="Tab 3" v-if="activeName === 'tab3'">
        <p>Tab 3 content</p>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeName: 'tab1'
    };
  },
  methods: {
    handleClick(tab, event) {
      console.log(tab, event);
    }
  },
};
</script>

在这个例子中,我们使用了 ELEMENT-UI 的 Tabs 组件简化了开发过程。依据 activeName 的值,渲染对应的子组件。

4. Bootstrap + Jquery 实现

Bootstrap 和 Jquery 是另外一种常见的前端技术组合,也可以实现 tab 页面切换功能。

在 HTML 代码中,添加对相应的 Bootstrap 和 Jquery库的调用:

<head>
  <title>Bootstrap tab example</title>

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>

<body>
  <ul class="nav nav-tabs">
    <li class="active"><a data-toggle="tab" href="#tab1">Tab 1</a></li>
    <li><a data-toggle="tab" href="#tab2">Tab 2</a></li>
    <li><a data-toggle="tab" href="#tab3">Tab 3</a></li>
  </ul>

  <div class="tab-content">
    <div id="tab1" class="tab-pane fade in active">
      <h3>Tab 1</h3>
      <p>This is tab content</p>
    </div>
    <div id="tab2" class="tab-pane fade">
      <h3>Tab 2</h3>
      <p>This is tab content</p>
    </div>
    <div id="tab3" class="tab-pane fade">
      <h3>Tab 3</h3>
      <p>This is tab content</p>
    </div>
  </div> 
</body>

以上代码中,我们利用 Bootstrap 的 nav-tabs 和 tab-pane 样式类和 Jquery 的 data- 属性来指定要显示哪个 tab 子页面。

总结:以上四种方法中,vue-router 和标准的 VUE 动态组件方法最为使用广泛。 vue-router 适用于当子页面需要使用 router 功能时,标准的 VUE 动态组件方法适用于仅需切换子页面内容时。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VUE的tab页面切换的四种方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解VUE单页应用骨架屏方案

    标题:详解VUE单页应用骨架屏方案 什么是骨架屏 骨架屏即为页面骨架,通俗点来说就是一个页面还没加载完成时,所出现的一种页面展示方案。它将页面大致的结构和样式提前定义好,填充占位元素在视觉上证明了页面正在加载。而实际上用户看到的只是一个假象,等待页面正式加载完成后,占位元素会被替换成真实的内容。 骨架屏在VUE单页应用中的应用 在VUE单页应用中,页面通过异…

    Vue 2023年5月28日
    00
  • 有关vue 组件切换,动态组件,组件缓存

    关于Vue组件切换和缓存的相关问题,我可以为您提供如下攻略: 动态组件 Vue提供了一种动态切换组件的机制,就是使用动态组件。使用dynamic <component>标签,可以在同一个挂载点上动态地切换不同的组件: <!– 动态组件 –> <component v-bind:is="currentComponen…

    Vue 2023年5月28日
    00
  • vue中push()和splice()的使用解析

    Vue中push()和splice()的使用解析 在Vue中,使用push()和splice()可以对数组进行增删改操作。本篇攻略将对这两个方法进行详细解析,并给出至少两个示例来说明使用这两个方法。 push() 的使用解析 push() 方法可以向数组的末尾添加新的元素,并返回数组的新长度。其语法如下: array.push(item1, item2, .…

    Vue 2023年5月28日
    00
  • 前端面试之vue2和vue3的区别有哪些

    下面是“前端面试之vue2和vue3的区别有哪些”的完整攻略。 1. Vue2与Vue3的区别 Vue3相比于Vue2在性能、API以及组合式API等方面做了很多的优化和改进。 1.1 性能 Vue3在渲染性能方面做出了很多的调整,如通过编译器对hr函数进行内联处理、优化模板中的静态内容、通过Fragments(片段)降低内存使用等。同时,Vue3还引入了响…

    Vue 2023年5月29日
    00
  • 详解Vue-基本标签和自定义控件

    下面我将详细讲解Vue.js中基本的标签和自定义组件的使用方法。 基本标签 Vue.js中有几个常用的标签,分别是{{}}、v-on、v-bind和v-model。 {{}}标签 {{}}是Vue.js中用于绑定数据的标签,类似于JavaScript中的模板字符串。在Vue.js中我们可以使用它将数据和DOM元素绑定起来,当数据发生变化时,DOM元素会自动更…

    Vue 2023年5月28日
    00
  • vue2.x双向数据绑定原理解析

    vue2.x双向数据绑定原理解析 什么是双向数据绑定 双向数据绑定是指视图层和数据层之间的数据同步。当数据层中的数据发生变化时,视图层会自动更新;反之,当视图层中用户操作修改了数据时,数据层的数据也会自动更新。 通常而言,双向数据绑定有两种方式,一种是脏值检测(angular.js),另一种则是数据劫持(vue.js)。 本文将介绍 vue2.x 中的数据劫…

    Vue 2023年5月27日
    00
  • vue中this.$refs的坑及解决

    vue中this.$refs的坑及解决 在Vue的开发过程中,我们通过this.$refs来访问DOM元素或子组件实例。但是在使用的过程中,这个特性也有一些坑点需要我们注意。接下来我会详细讲解这些坑点以及如何解决它们。 坑点1:this.$refs在初始化时可能为空 在组件的生命周期中,created钩子函数是在组件的数据和方法都准备就绪,但是DOM并不一定…

    Vue 2023年5月28日
    00
  • Vite使用Esbuild提升性能详解

    Vite使用Esbuild提升性能详解 背景 Vite是一个轻量级的前端工具,它的设计初衷是为了让开发者更快地启动和构建项目,提供了一些开箱即用的特性和优化,例如快速启动、模块热更新等。其中,Vite的关键特性之一就是使用了类似于Snowpack的“零配置”的模式进行快速的开发体验。 然而,在一些情况下,Vite的构建速度还是无法满足一些开发者的需求。因此,…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部