• 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    子组件

    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

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

    <template>
      <el-input v-model="modelValue.username" @change="handleChange"/>
      <el-input v-model="modelValue.userid" @change="handleChange1"/>
    template>
    
    <script>
    export default {  
      props: ['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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    Vue 基本模板语法(入门级别)
    linux shell(一)
    docker启动前端
    java计算机毕业设计火车订票系统MyBatis+系统+LW文档+源码+调试部署
    说说Selenium的几个痛处
    【uni-app+vue3】分享功能,App端调用手机的系统分享,可分享到微信、QQ、朋友圈等,已实现
    app自动化测试之Appium问题分析及定位
    高逼格,程序员专属音乐播
    什么是push通知栏消息?
    write_project_tcl
  • 原文地址:https://blog.csdn.net/zhaozuoyou/article/details/132888112