vue项目中动态组件场景的使用

项目场景:

项目中会出现点击不同div会弹出不同的弹框,或者切换不同的页面场景


问题描述

如果是弹出不同的弹框,我们通常会写几个对应得不同弹框组件,然后全部注册在父组件里面,点击不同得div后设置不同的dialogVisible。

//HTML部分:
<template>
<div>
  <div
    v-for="item in list"
		  :key="el.type"
	@click="changeType(el.type)">

    <span>{{item.name}}</span>

  </div>

  <ADialog ref="ADialogRef"/>
  <BDialog ref="BDialogRef"/>
  <CDialog ref="CDialogRef"/>
  <DDialog ref="DDialogRef"/>
</div>
</template>

//Script部分:
<script>
    import Aialog from './ADialog'
    import BDialog from './BDialog'
    import CDialog from './CDialog'
    import DDialog from './DDialog'
export default {
	name: 'Father',
	components: {
		ADialog,
		BDialog,
		CDialog,
		DDialog
	},
   data:{
    clickType:0
    list:[{type:0,name:'汉克博'},
          {type:1,name:'窗帘'},
          {type:2,,name:'欧式'}, 
          {type:3,name:'定制'}]
   },
   methods:{
    changeType(type){
      this.clickType = type;
      const obj = {
          '0':ADialog,
          '1':Bdialog,
          '2':Cdialog,
          '3':DDialog,
         };
      this.$refs.obj[type]Ref.dialogVisible = true
  },
  
}

</script>


动态组件方案:

//HTML部分:
<template>
<div>
  <div
    v-for="item in list"
		  :key="el.type"
	@click="changeType(el.type)">

    <span>{{item.name}}</span>

  </div>

  <component is="isDialog"/>
</div>
</template>

//Script部分:
<script>
    import Aialog from './ADialog'
    import BDialog from './BDialog'
    import CDialog from './CDialog'
    import DDialog from './DDialog'
export default {
	name: 'Father',
	components: {
		ADialog,
		BDialog,
		CDialog,
		DDialog
	},
   data:{
    clickType:0
    list:[{type:0,name:'汉克博'},
          {type:1,name:'窗帘'},
          {type:2,,name:'欧式'}, 
          {type:3,name:'定制'}],
   },
   computed:{
     isDialog(){
       const obj = {
          '0':ADialog,
          '1':Bdialog,
          '2':Cdialog,
          '3':DDialog,
         };
       return obj[this.clickType]
    }
  
   },
   methods:{
    changeType(type){
      this.clickType = type;
  },
  
  
}

</script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值