当前位置: 首页 > news >正文

vue3父子组件传对象,子组件访问修改父组件对象中的属性值

父组件:

<template>
  <CustomInput v-model="message.person" /> {{ message}}
</template>

<script>
import CustomInput from './CustomInput.vue'

export default {
  components: { CustomInput },
  data() {
    return {
      message: {name:'',person:{username:'zhangsan',userid:'1234'}}
    }
  }
}
</script>

子组件:

<template>
  <input :value="modelValue.username" @change="handleChange" />
  <input :value="modelValue.userid" @change="handleChange1" />
</template>

<script>
export default {  
  props: ['modelValue'],  
  emit: ['update:modelValue'],  
  setup(props,{emit}) {  
   const handleChange = (event) => {  
      emit('update:modelValue', { ...props.modelValue, username: event.target.value});  
    }
    const handleChange1 = (event) => {  
      emit('update:modelValue', { ...props.modelValue, userid: event.target.value});  
    }
    return { handleChange ,handleChange1 }   
  }  
}  
</script>

如使用element-plus写法如下:
<template>
  <el-input v-model="modelValue.username" @change="handleChange"/>
  <el-input v-model="modelValue.userid" @change="handleChange1"/>
</template>

<script>
export default {  
  props: ['modelValue'],  
  emit: ['update:modelValue'],  
  setup(props,{emit}) {  
   const handleChange = (event) => {  
      emit('update:modelValue', { ...props.modelValue, username: event});  
    }
    const handleChange1 = (event) => {  
      emit('update:modelValue', { ...props.modelValue, userid: event});  
    }
    return { handleChange ,handleChange1 }   
  }  
}  
</script>

在实际运用中不需要这么复杂,父组件不变,子组件如下

<template>
  <el-input v-model="modelValue.username" @change="handleChange"/>
  <el-input v-model="modelValue.userid" @change="handleChange1"/>
</template>

<script>
export default {  
  props: ['modelValue'],  
  emit: ['update:modelValue'],  
  setup(props) {  
   const handleChange = (event) => {  
     //具体逻辑 例如:修改父组件username的值
     props.modelValue.person.username = 'lisi'
     props.modelValue.person.username = props.modelValue.person.username.slice(0,2)
    }
    const handleChange1 = (event) => {  
      //具体逻辑
    }
    return { handleChange ,handleChange1 }   
  }  
}  
</script>

相关文章:

  • 第13节-PhotoShop基础课程-裁剪工具
  • MySQL 面试题——MySQL 基础
  • VBA技术资料MF57:VBA_自动创建PowerPoint演示文稿
  • 无涯教程-JavaScript - OFFSET函数
  • Hadoop-Hbase
  • [npm] npx 介绍与使用说明
  • 什么是同步容器和并发容器的实现?
  • 与导师沟通2023-09-14
  • 数据库表的基本操作
  • nowcoder NC30 缺失的第一个正整数
  • 学习python和anaconda的经验
  • c语言输出杨辉三角
  • 安卓恶意应用识别(三)(批量反编译与属性值提取)
  • C【数组】
  • 中国IT分销行业市场研究与投资战略报告(2023版)
  • Android 原生内置应用配置
  • 数据分析三剑客之Pandas
  • 网络安全宣传周|探索AI数字人的魅力和价值所在
  • Windows驱动开发(一)第一个驱动程序
  • 企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
  • 2025五一档新片电影总票房破亿
  • 朝鲜海军新型驱逐舰进行首次武器系统测试
  • 国铁集团郑州局预计“五一”发送642.5万人
  • 华侨城A:一季度营收53.63亿元,净利润亏损14.19亿元
  • 影子调查丨危房之下,百余住户搬离梦嘉商贸楼
  • 脱发后怎么把头发养回来?脱发自救指南来了