尊敬的会员   
网站首页 >> 综合资讯 >> 文章内容

vue如何使用动态组件实现TAB切换效果

[日期:2023-11-09]   来源:  作者:   阅读: 0[字体: ]
一、方法1:使用Vant组件库的tab组件

Vant 2 - Mobile UI Components built on Vue

二、 方法2:手动创建tab切换效果

1.在ponents文件夹下创建切换的.vue页面、引入使用

import one from "./ponents/one";import two from "./ponents/two";import three from "./ponents/three";import four from "./ponents/four";ponents: {    one,    two,    three,    four,},

2.布局:上面放tab点击的标签,下面放组件呈现对应内容

// 然后使用v-for循环出来呈现<template>   <div id="app">      <div class="top">      <!-- 放置tab点击标签 -->         <div class="crad"         :class="{ highLight: whichIndex == index }"         v-for="(item, index) in cardArr"         :key="index"         @click="whichIndex = index">            {{ item.ponentName }}        </div>      </div>      <div class="bottom">        <!-- 放置动态组件... -->       <!-- keep-alive缓存组件,这样的话,组件就不会被销毁,DOM就不会被重新渲染,       浏览器也就不会回流和重绘,就可以优化性能。不使用的话页面加载就会慢一点 -->       <keep-alive>         <ponent :is="ponentId"></ponent>       </keep-alive>      </div>   </div></template>

3.写好上面的tab点击标签,定义数据修改样式

// 首先我们在data中定义数组cardArr存放点击tab的数据data() {   return {      whichIndex: 0,      cardArr: [        {          ponentName: "动态组件一",          ponentId: "one",        },{          ponentName: "动态组件二",          ponentId: "two",        },{          ponentName: "动态组件三",          ponentId: "three",        },{          ponentName: "动态组件四",          ponentId: "four",        },      ],    };},
// 又因为需要有高亮状态样式:默认索引0高亮.highLight {  box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);  transform: translate3d(0, -1px, 0);}
三、完整代码
<template>  <div id="app">    <div class="top">      <div        class="crad"        :class="{ highLight: whichIndex == index }"        v-for="(item, index) in cardArr"        :key="index"        @click="          whichIndex = index;          ponentId = item.ponentId;        "      >        {{ item.ponentName }}      </div>    </div>    <div class="bottom">      <keep-alive>        <ponent :is="ponentId"></ponent>      </keep-alive>    </div>  </div></template><script>import one from "./ponents/one";import two from "./ponents/two";import three from "./ponents/three";import four from "./ponents/four";export default {  ponents: {    one,    two,    three,    four,  },  data() {    return {      whichIndex: 0,      ponentId: "one",      cardArr: [        {          ponentName: "动态组件一",          ponentId: "one",        },        {          ponentName: "动态组件二",          ponentId: "two",        },        {          ponentName: "动态组件三",          ponentId: "three",        },        {          ponentName: "动态组件四",          ponentId: "four",        },      ],    };  },};</script><style lang="less" scoped>#app {  width: 100%;  height: 100vh;  box-sizing: border-box;  padding: 50px;  .top {    width: 100%;    height: 80px;    display: flex;    justify-content: space-around;    .crad {      width: 20%;      height: 80px;      line-height: 80px;      text-align: center;      background-color: #fff;      border: 1px solid #e9e9e9;    }    .highLight {      box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);      transform: translate3d(0, -1px, 0);    }  }  .bottom {    margin-top: 20px;    width: 100%;    height: calc(100% - 100px);    border: 3px solid pink;    display: flex;    justify-content: center;    align-items: center;  }}</style>
相关评论
赞助商链接
赞助商链接