vue3+element plus + js封装自定义弹框组件

1 篇文章 0 订阅
1 篇文章 0 订阅

vue3+element plus+js封装自定义弹框组件

vue3和vue2封装组件是不同的,vue3的双向绑定是proxy,用的是代理,所以封装组件不能按照vue2那样传值
下面是我自己封装的一个弹框组件,希望能帮到各位伙伴,因为公司搭建的框架是依据js的,所以尽管我们用vue3开发,也没有用ts
父组件

template内容

<el-button @click="dia">编辑</el-button>
<el-button @click="dia2">新增</el-button>
<ComponentAddUpdate :addUpdateData="state.addUpdateData" @submit="submitData"></ComponentAddUpdate>

js内容

import ComponentAddUpdate from '../workplace/components/add-update.vue'
export default {
	components: {
    	ComponentAddUpdate,
	},
	setup(){
		// 必须按照这种方式进行传值,不然修改diaVisible值并不会进行双向绑定
		let state = reactive({
              addUpdateData: {}
        })
        function dia() {
              state.addUpdateData = {title: '编辑组织',diaVisible: false,options:{
					name: "一枕星梦河"
			  }}
              state.addUpdateData.diaVisible = true
              console.log(state.addUpdateData.diaVisible)
        }
        function dia2() {
              state.addUpdateData = {title: '新增组织',diaVisible: false,options:{}}
              state.addUpdateData.diaVisible = true
              console.log(state.addUpdateData.diaVisible)
        }
        function submitData(addUpdateData){
              console.log(addUpdateData)
              state.addUpdateData.diaVisible = false
        }
        return {
              state,
              submitData,
              dia,
              dia2,
        }
	}
}
子组件

template内容

<el-dialog
    :title="addUpdateData.title"
    v-model="addUpdateData.diaVisible"
    width="1200px"
>
	<el-input v-model="addUpdateData.options.name" placeholder="输入姓名" />
	<el-button type="default" @click="addUpdateData.diaVisible = false">取消</el-button>
    <el-button type="primary" @click="doAddUpdateSubmit">提交</el-button>
</el-dialog>

js内容

import { onMounted, ref, toRefs, reactive } from 'vue'
export default{
	props:{
        addUpdateData: {
            type: Object,
            default: {}
        },
    },
    // 接收传入过来的props  引入emit进行子父传值
    setup(props, { emit }){
		let { addUpdateData } = toRefs(props)
		
		function doAddUpdateSubmit() {
			// emit('提示事件名称', 要传入的值)
			// emit() 第一个参数为父组件要用@绑定的事件,这里就是@submit,详见父组件
            emit('submit', props.addUpdateData)
        }
        
        return{
			addUpdateData,
			doAddUpdateSubmit
		}
	}
}

到这里就算封装结束了,组件里面的内容,自己自定义,我这里用的是表单,还有其他问题的话,可以随时留言讨论或者私信

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值