component动态组件

1.组件动态化

<template>
    <div>
        <button @click="handleChangeComp">切换</button>
        <component :is="currentTabComponent"></component>
    </div>
</template>

<script>
    import pageA from './components/pageA'
    import pageB from './components/pageB'
    import pageC from './components/pageC'
    export default {
        components:{
            pageA,
            pageB,
            pageC
        },
        data() {
            return {
                currentTabComponent: 'pageA',
                componentList: ['pageA','pageB','pageC'],
                index: 0
            }
        },
        methods: {
            handleChangeComp() {
                return this.componentList[this.index]
            }
        }
    }
</script>

 2.组件保持缓存

<keep-alive>
  <component v-bind:is="currentTabComponent"></component>
</keep-alive>

3.标签动态化

<template>
  <component :is="type" v-bind="linkProps(to)">
    <slot />
  </component>
</template>

<script>
// 检验格式的方法
import { isExternal } from '@/utils/validate'

export default {
  props: {
    to: {
      type: String,
      required: true
    }
  },
  computed: {
    isExternal() {
      return isExternal(this.to)
    },
    // 返回不同的标签
    type() {
      if (this.isExternal) {
        return 'a'
      }
      return 'router-link'
    }
  },
  methods: {
    // 绑定标签的属性,根据检验的不同返回不同的标签再绑定各自的属性
    linkProps(to) {
      if (this.isExternal) {
        return {
          href: to,
          target: '_blank',
          rel: 'noopener'
        }
      }
      return {
        to: to
      }
    }
  }
}
</script>

4.component绑定标签和组件的优先级

        标签的优先级高于组件的优先级,在自定义组件中,避免重名标签

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值