前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >父组件向子组件传递一个组件

父组件向子组件传递一个组件

作者头像
leader755
发布2023-07-31 14:44:05
1050
发布2023-07-31 14:44:05
举报

说明:封装多级 tab 栏的 keep-alive 缓存通用组件 关键点:父组件向子组件传递值,对象,数组、函数,父组件还能向子组件传递一个组件。

代码语言:javascript
复制
// 导入子组件全部改为动态导入
// import promoter from './promoter'
// import commissionSummary from './commissionSummary'
// import commissionDetail from './commissionDetail'
import customTabs from "&&/components/keepAliveComponent/index.vue";
const componentContent = {
  // promoter: () => require('./promoter.vue'),//此种写法不行
  promoter: () => import("./promoter.vue"),
  commissionSummary: () => import("./commissionSummary.vue"),
  commissionDetail: () => import("./commissionDetail.vue"),
};
export default {
  components: {
    customTabs,
    // promoter,
    // commissionSummary,
    // commissionDetail
  },
  data() {
    return {
      componentList: componentContent,
      tabList: [
        {
          label: "推广员",
          name: "promoter",
          keepAlive: this.$route.meta?.keepAlive,
        },
        {
          label: "佣金汇总",
          name: "commissionSummary",
          keepAlive: this.$route.meta?.keepAlive,
        },
        {
          label: "佣金明细",
          name: "commissionDetail",
          keepAlive: this.$route.meta?.keepAlive,
        },
      ],
      activeName: "promoter",
    };
  },
};
代码语言:javascript
复制
export default {
  props: {
    componentList: {
      // 组件列表
      type: Object,
      required: true,
      default: () => {},
    },
    tabList: {
      // tab列表
      type: Array,
      required: true,
      default: () => [],
    },
    activeName: {
      // 当前激活的tab
      type: String,
      required: true,
      default: "",
    },
    isLine: {
      // 是否显示下划线
      type: Boolean,
      required: false,
      default: true,
    },
  },
  data() {
    return {
      tabListData: this.tabList || [],
    };
  },
  watch: {
    tabList: {
      handler(val) {
        this.tabListData = this.tabList.map((item) => {
          item.keepAlive = item.hasOwnProperty("keepAlive")
            ? item.keepAlive
            : this.$route.meta?.keepAlive; // 默认赋值keepAlive为当前页面的keepAlive值
          return item;
        });
      },
      immediate: true,
      deep: true,
    },
  },
  computed: {
    tabShow() {
      console.log(this.tabListData, "jjjjjj");
      return this.tabListData.filter((item) => item.name === this.activeName)[0]
        ?.keepAlive;
    },
  },
  created() {
    // console.log(this.componentList[this.activeName], 'this.tabList')
  },
  methods: {
    handleClick(tab, event) {
      // console.log(tab, 'HHHHHHHHHH')
      this.$emit("update:activeName", tab.name);
    },
  },
};


/deep/ .el-tabs__nav,
/deep/ .el-tabs__nav .el-tabs__item {
  height: 40px;
  line-height: 40px;
}

.visableClass {
  /deep/ .el-tabs__active-bar {
    display: block;
    // margin-bottom: 20px;
  }
  /deep/ .el-tabs__nav-wrap:after {
    display: block;
  }
}
.visableNoClass {
  /deep/ .el-tabs__active-bar {
    display: none;
  }
  /deep/ .el-tabs__nav-wrap:after {
    display: none;
  }
  /deep/ .el-tabs__header {
    margin-bottom: 10px;
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档