vue项目 封装tab切换组件

本文介绍了Vue中父组件如何使用模板语法来调用封装好的子组件,并通过属性传递数据。子组件包含了事件监听和响应,通过`@on-change`触发父组件的方法,实现数据的双向绑定。示例代码展示了具体实现过程,包括子组件的`title-tabs`的封装及其在父组件中的应用。
摘要由CSDN通过智能技术生成

1.父组件对封装好的子组件的使用方式

<template>
 <div class="card_class">
      <title-tabs
         style="margin-top: 4.07vh; margin-bottom: 2vh"
         title="个体背景分析"
         :dataList="tabs"
         @on-change="getChangeVal"
       ></title-tabs>
            </div>
            </template>
	<script>
	import titleTabs from "@/components/titleTabs/title-tabs"; 
	export default {
	data(){
	return{
	id:'',
	changName :'',
	 tabs: [
        {
          regionName: "婚姻状态",
          value: 0,
        },
        {
          regionName: "收入水平",
          value: 1,
        },
        {
          regionName: "教育程度",
          value: 2,
        },
        {
          regionName: "职业",
          value: 3,
        },
      ],
	}
	},
	  getChangeVal(val) {
      console.log(val);
      this.id = val.value;
      this.changName = val.regionName;
      this.getPeopleList();
    },
	components:{
	  titleTabs,
	</script>

2.子组件封装的代码

<template>
  <div
    class="title-tabs"
    style="
      display: flex;
      flex-direction: row;
      justify-content: space-between;
      align-items: center;  
    "
  >
    <span class="title-tabs_title" v-if="title">
      {{ title ? title : "" }}
    </span>
    <div class="card-tab selfTab" style="margin-top: 0">
      <span
        v-for="(item, index) in dataList"
        :key="index"
        :class="tabsIndex == index ? 'active' : ''"
        @click="toggleTabs(index,item)"
        >{{ item.regionName }}</span
      >
    </div>
     <!-- <div class="card-tab selfTab" style="margin-top: 0">
      <span
        v-for="(item, index) in infolist"
        :key="index"
        :class="tabsIndex == index ? 'active' : ''"
        @click="toggleTable(index,item)"
        >{{ item.name }}</span
      >
    </div> -->
  </div>
</template>
<script>
export default {
  name: "title-tabs",
  data() {
    return {
      tabsIndex: 0,
    };
  },
  props: {
    title: String,
    dataList: Array,
    infolist:Array,
  },
  mounted() {},
  methods: {
    toggleTabs(index,item) {
      this.tabsIndex = index;
      this.$emit("on-change", item);
    },
      toggleTable(index,item) {
      this.tabsIndex = index;
      this.$emit("on-changeInfo", item);
    }, 
  },
};
</script>
<style scoped lang='scss'>
.selfTab {
  span {
    margin-left: 0.1rem;
    &:first-child {
      margin-left: 0;
    }
  }
}
.title-tabs {
  &_title {
    font-size: 0.2rem;
    font-family: Microsoft YaHei;
    font-weight: bold;
    color: #ffffff;
    line-height: 0.2rem;
  }
}
.card-tab {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;

  justify-content: space-between;

  margin-top: 2.31vh;
  span {
    background: rgba(255, 255, 255, 0.38);
    border-radius: 0.04rem;
    padding: 0.06rem 0.12rem;
    font-size: 0.18rem;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #ffffff;
    line-height: 0.18rem;
    &.active {
      background: linear-gradient(0deg, #2093f7, #00bbff);
    }
  }
}
</style>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值