vue3中实现el-dialog弹窗

  1. vue3中的父子组件传递依然和vue2中的一样使用props和emit, 但是写法略有不同;
  2. emit(自定义事件)-子传父;
  3. props-父传子:
    父组件中:
<template>
  <div>
     <el-button @click="toTonfigure">配置</el-button>
     <efficacy-dialog
        v-if="dialogVisible"
        :dialogVisible="dialogVisible"
        @close="closeDialog"  />
        
  </div>
</template>

<script lang="ts">
import { defineComponent, getCurrentInstance, toRefs, reactive } from 'vue'
import efficacyDialog from './efficacyDialog.vue'

export default defineComponent({
    name: 'EfficacyEvaluation',
    components: {
      efficacyDialog
    },
    setup() {
        const { proxy } = getCurrentInstance() as any
        const state:any = reactive({
          dialogVisible: false
        })
        const states = toRefs(state);
        
        function toTonfigure() {
          proxy.dialogVisible = true
        }

        function closeDialog() {
          proxy.dialogVisible = false
        }
        

        return {
          ...states,
          toTonfigure,
          closeDialog
        }

    }

})


</script>

子组件中:

<template>
  <el-dialog
    title="疗效评估类型"
    :model-value="dialogVisible"
    :close-on-click-modal="false"
    width="50%"
    :before-close="handleClose">
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" >
      <el-form-item label="疗效评估类型" prop="region">
        <el-select v-model="ruleForm.region" placeholder="请选择">
          <el-option label="评估记录" value="record"></el-option>
          <el-option label="评估结果" value="result"></el-option>
          <el-option label="评估报告" value="report"></el-option>
        </el-select>
      </el-form-item>
    </el-form>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="handleClose">取 消</el-button>
        <el-button type="primary" @click="save">确 定</el-button>
      </span>
    </template>
  </el-dialog>
</template>

<script lang="ts">
import { defineComponent, getCurrentInstance, toRefs, reactive } from 'vue'

export default defineComponent({
    name: 'EfficacyDialog',
    props: {
      dialogVisible: {
        type: Boolean,
        default: false
      }
    },
    emits: ['close'],
    setup(props, { emit }) {
        const { proxy } = getCurrentInstance() as any
        const state:any = reactive({
          ruleForm: {
            region: ''
          },
          rules: {
            region: [
              { required: true, message: '请选择疗效评估类型', trigger: 'change' }
            ]
          }
        })
        const states = toRefs(state);
        
        function save() {
          
          handleClose()
        }

        function handleClose() {
          emit('close', false)
        }
        return {
          ...states,
          handleClose,
          save
        }
    }
})
</script>
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值