Vue的tab切换的封装和components组件传递

       之前因为样式和多次的复用的原因要用到一个组件切换的封装,需要把父组件引入的components来动态输入到子组件来进行动态切换,发现父子传参只能传递状态和方法,也百度了好久,最后发现组件的传递可以通过ref来进行传递,不废话了 直接上代码        

 父组件的引入,通过titleData来导入title,对应自己引入的Storage和Stock

<template>
  <div>
    <TabCup ref="tabCup" :titleData="titleData"></TabCup>
  </div>
</template>

<script>
import TabCup from '../../components/tabCut/index.vue'
import Storage from './Storage.vue';
import Stock from './stock.vue'

export default {
  name: '',
  components: { Storage, Stock, TabCup },
  data() {
    return {
      msg: '测试',
      currentTab: "Storage",
      titleData: ["采收入库产品", "已出库产品"]
    }
  },
  created() {
  },
  mounted() {
    let params = [Storage, Stock]
    this.$refs.tabCup.init(params)
  },
  // Vue方法定义
  methods: {
  }
}
</script>

<style scoped></style>

通过init来承接ref的传值,这个时候我们可以看到可以接收到对象了

 

tabCup子组件的代码因为component组件的is可以切换动态组件 所以我通过循环来写的,当然有更好的办法大家也可以评论区告诉我

<template>
  <div>
    <div class="stockTitle">
      <div class="stockMenu" v-for="(item, index) in titleData" :key="index">
        <h3 @click="setNum(index)">{{ item }}</h3>
        <div :class="num === index ? 'active' : ''"></div>
      </div>
    </div>
    <div v-for="(item, index) in Components" :key="index">
      <component :is="index === num ? item : null"></component>
    </div>
  </div>
</template>
<script>
export default {
  name: '',
  props: ['titleData'],
  data() {
    return {
      num: 0,
      Components: []
    }
  },
  created() {
  },
  mounted() {

  },
  // Vue方法定义
  methods: {
    init(params) {
      this.Components = params
    },
    setNum(index) {
      this.num = index
    },
  },

}
</script>

<style scoped>
/* @import url(''); 引入css类 */
.stockTitle {
  display: flex;
  justify-content: center;
  align-items: center;
}

h3 {
  margin-right: 10px;
  font-size: 20px;
  font-size: 600;
}

.stockMenu {
  position: relative;
}

.active {
  width: 90px;
  height: 8px;
  position: absolute;
  bottom: 20px;
  left: calc(50% - 50px);
  background-color: rgb(167, 234, 202);
  border-radius: 4px;
  z-index: -88;
}
</style>

到这里就完成一个简单的tab切换了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值