Vue学习记录-Vue组件基本使用。父子组件

2020年5月13日

<div id="app">
    <my-cpn></my-cpn>
    <my-cpn></my-cpn>
  </div>
  <script src="../js/vue.js">
  </script>
  <script>
    //ES6
    // `ck
    // sfa`

    //  1.创建组件构造器对象
    const cpnC = Vue.extend({
      template: `
      <div>
        <h2>标题</h2>
        <p>内容1</p>
        <p>内容2</p>  
      </div>
      `
    })

    // 2.注册组件
    Vue.component('my-cpn',cpnC);

     const app = new Vue({
        el: '#app',
        data: {
          message: 'hello'
        }
     })
  </script>
components: {
          //局部组件
          //cpn使用组件时的标签名
          cpn: cpnC
        }

父子组件:

<div id="app">
    <cpn2></cpn2>
  </div>
  <script src="../js/vue.js">
  </script>
  <script>
   
    //子组件
    const cpnC1 = Vue.extend({
      template: `
      <div>
        <h2>标题</h2>
        <p>内容1</p>
        <p>内容2</p>  
      </div>
      `
    })

    //父组件
    const cpnC2 = Vue.extend({
      template: `
      <div>
        <h2>标题2</h2>
        <p>内容1</p>
        <p>内容2</p>  
        <cpn1></cpn1>
      </div>
      `,
      components: {
          cpn1: cpnC1,
        }
    })

    //root组件
     const app = new Vue({
        el: '#app',
        data: {
          message: 'hello'
        },
        components: {
          cpn2: cpnC2
        }
     })
  </script>

 

<think>好的,用户需要Vue3中使用el-dialog组件进行父子组件通信的示例代码。首先,我得回忆一下Vue3的组件通信方式,尤其是父子组件之间的props和自定义事件。Element Plus的el-dialog组件有一个v-model来控制显示隐藏,这个应该用prop传递。 然后,父组件需要传递一个布尔值给子组件的dialogVisible,子组件通过emit来更新这个状态。比如,子组件在关闭对话框时触发update:visible事件,父组件监听这个事件来同步状态。可能还需要处理对话框关闭时的逻辑,比如用户点击关闭按钮或遮罩层时触发的事件。 接下来要考虑代码结构。父组件引入子组件使用v-model绑定visible属性。子组件接收visible作为prop,并在内部用el-dialog的v-model绑定。当对话框关闭时,子组件应该emit事件通知父组件更新visible的值。 可能需要处理关闭前的确认,比如用户是否真的想关闭,这时候可以用before-close属性。但基本示例可能不需要这个,先保证通信正常。代码示例需要展示父组件如何传递和控制状态,子组件如何接收和更新。 另外,注意Vue3的语法,比如使用defineProps和defineEmits,以及setup语法糖。确保示例代码正确,比如在子组件使用emits声明事件,并在关闭时触发emit。 最后,生成相关问题,可能涉及其他通信方式、表单验证、样式自定义等。确保引用格式正确,比如[^1]的引用标识,但用户提供的引用内容为空,可能需要忽略或调整。</think>### Vue3中el-dialog父子组件通信示例 #### 核心实现步骤: 1. **父组件通过`v-model`传递显示状态** 2. **子组件通过`defineProps`接收参数** 3. **子组件通过`defineEmits`触发状态更新** ```vue <!--组件 Parent.vue --> <template> <div> <el-button @click="showDialog = true">打开对话框</el-button> <ChildDialog v-model="showDialog" /> </div> </template> <script setup> import { ref } from 'vue' import ChildDialog from './ChildDialog.vue' const showDialog = ref(false) </script> ``` ```vue <!--组件 ChildDialog.vue --> <template> <el-dialog v-model="dialogVisible" title="提示" width="30%" @close="handleClose" > <span>这是对话框内容</span> <template #footer> <el-button @click="closeDialog">取消</el-button> <el-button type="primary" @click="confirmAction">确认</el-button> </template> </el-dialog> </template> <script setup> defineProps({ modelValue: { type: Boolean, default: false } }) const emit = defineEmits(['update:modelValue']) const dialogVisible = computed({ get: () => props.modelValue, set: (val) => emit('update:modelValue', val) }) const closeDialog = () => { dialogVisible.value = false } const confirmAction = () => { // 执行确认操作 closeDialog() } </script> ``` #### 关键点解析: 1. **双向绑定**:使用`v-model`实现父子组件状态同步,对应`modelValue`属性[^1] 2. **计算属性**:通过`computed`实现prop到本地状态的转换 3. **事件传递**:使用`defineEmits`声明自定义事件,实现状态更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值