Vue-三种方式实现tab切换

一、通过V-show/V-if实现

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .active {
            background: red;
        }

        .tabs {
            background-color: blue;
            width: 200px;
            height: 20px;
            font: 0;
            padding: 0;
        }

        .li-tab {
            width: 30%;
            height: 100%;
            display: inline-block;
            text-align: center;
        }

        .divTab {
            width: 200px;
            height: 300px;
        }
    </style>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <ul class="tabs">
            <li class="li-tab" v-for="(item,index) in tabsParam" @click="toggleTabs(index)"
                :class="{active:index == nowIndex}" :key="index">{{item}}</li>
        </ul>
        <div class="divTab" v-show="nowIndex ===0">我是栏目1</div>
        <div class="divTab" v-show="nowIndex ===1">我是栏目2</div>
        <div class="divTab" v-show="nowIndex ===2">我是栏目3</div>
    </div>
</body>

</html>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            tabsParam: ['1', '2', '3'],
            nowIndex: 0
        },
        methods: {
            toggleTabs: function (index) {
                this.nowIndex = index;
            }
        }
    })
</script>

直接运行即可
效果如图
在这里插入图片描述

二、利用组件实现

利用is属性实现
app.vue

<template>
  <div id="app">
    <div>lueluelue</div>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <!-- void0取消默认事件一个原理 -->
    <a href="javascript:void(0);" @click="toggleTabs(first)">{{ first }}</a
    >&nbsp;&nbsp;&nbsp;
    <a href="javascript:void(0);" @click="toggleTabs(second)">{{ second }}</a
    >&nbsp;&nbsp;&nbsp;
    <a href="javascript:void(0);" @click="toggleTabs(third)">{{ third }}</a>

    <!-- 利用is特性实现动态绑定 keep-alive实现保存在内存可以重新渲染 -->
    <first :is="currentView" keep-alive></first>
  </div>
</template>

<script>
import first from "./components/first";
import second from "./components/second";
import third from "./components/third";

export default {
  name: "App",
  data() {
    return {
      first: "first",
      second: "second",
      third: "third",
      currentView: "second",
    };
  },
  components: {
    first,
    second,
    third,
  },
  methods: {
    toggleTabs(tabText) {
      this.currentView = tabText;
    },
  },
};
</script>



组件

<template>
  <div>我是第一张</div>
</template>

后两个同理

实现效果在这里插入图片描述

三、利用子路由切换

app.vue

<template>
  <div class="box">
    <!-- nav标题,路由指向 -->
    <div class="left">
      <router-link
        :to="item.src"
        v-for="(item, index) in navData"
        :key="index"
        >{{ item.title }}</router-link
      >
    </div>
    <div class="right">
      <!-- 路由跳转的位置 -->
      <router-view></router-view>
    </div>
  </div>
</template>
<script>
export default {
  name: "Index",
  data() {
    return {
      navData: [
        {
          title: "title一",
          src: "/",
        },
        {
          title: "title二",
          src: "/nav2",
        },
        {
          title: "title三",
          src: "/nav3",
        },
      ],
    };
  },
};
</script>
<style scoped>
.box {
  width: 100%;
  height: 100%;
  display: flex;
  background: rgba(0, 0, 0, 0.8);
}
.left {
  width: 200px;
  height: 100%;
  text-align: center;
  background: rgba(0, 0, 0, 0.4);
  padding: 20px;
}
.left a {
  text-decoration: none;
  display: block;
  margin-top: 20px;
  width: 100%;
  color: #fff;
}
.right {
  flex: 1;
  padding: 20px;
  color: #fff;
}
</style>

子路由

<template>
  <div>这是nav1</div>
</template>
<script>
export default {
  name: "nav1",
};
</script>

其他同理
router.js

import Vue from 'vue'
import Router from 'vue-router'
import Index from './App.vue'
import nav1 from './pages/nav1.vue'
import nav2 from './pages/nav2.vue'
import nav3 from './pages/nav3.vue'
// vue加载插件
Vue.use(Router);

export default new Router({
    // mode: 'history',
    // base: process.env.BASE_URL,
    routes: [
        {
            path: '/',
            //name: 'Index',
            component: Index,
            children: [
                {
                    path: '',
                    name: 'nav1',
                    component: nav1
                },
                {
                    path: 'nav2',
                    name: 'nav2',
                    component: nav2
                },
                {
                    path: 'nav3',
                    name: 'nav3',
                    component: nav3
                }
            ]
        }
    ]
})

实现效果如图
在这里插入图片描述

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue 3实现登录注册切换tab可以使用Vue Router和Vue的数据绑定机制来实现。 首先,需要安装和配置Vue Router。在项目中安装Vue Router,并在main.js文件中导入和使用Vue Router。 ``` // main.js import { createApp } from 'vue' import App from './App.vue' import router from './router' createApp(App).use(router).mount('#app') ``` 接下来,需要创建登录和注册组件。可以分别创建Login.vue和Register.vue组件。 ``` // Login.vue <template> <div> <h2>登录</h2> <!-- 登录表单 --> </div> </template> <script> export default { name: 'Login', } </script> ``` ``` // Register.vue <template> <div> <h2>注册</h2> <!-- 注册表单 --> </div> </template> <script> export default { name: 'Register', } </script> ``` 然后,在App.vue组件中创建导航菜单和切换tab的功能。使用Vue的数据绑定机制来切换tab。 ``` // App.vue <template> <div> <nav> <ul> <li @click="activeTab = 'login'" :class="{ active: activeTab === 'login' }">登录</li> <li @click="activeTab = 'register'" :class="{ active: activeTab === 'register' }">注册</li> </ul> </nav> <router-view :tab="activeTab" /> </div> </template> <script> export default { name: 'App', data() { return { activeTab: 'login', } }, } </script> ``` 最后,在router.js文件中配置路由。 ``` // router.js import { createRouter, createWebHistory } from 'vue-router' import Login from './Login.vue' import Register from './Register.vue' const routes = [ { path: '/login', component: Login, }, { path: '/register', component: Register, }, ] const router = createRouter({ history: createWebHistory(), routes, }) export default router ``` 完成以上步骤后,就可以根据点击导航菜单来切换登录和注册页面的tab了。点击导航菜单时,会触发activeTab的值改变,从而切换显示的组件。同时,Vue Router会根据路由的配置来加载相应的组件,实现路由切换的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值