当前位置: 首页> 娱乐> 明星 > vue3 学习笔记10 -- 父子传参

vue3 学习笔记10 -- 父子传参

时间:2025/7/15 15:47:02来源:https://blog.csdn.net/weixin_46328739/article/details/140444278 浏览次数:0次

vue3 学习笔记10 – 父子传参

父子组件之间的传参可以通过属性(prop)和事件(event)来实现

使用属性(props)传递数据

在子组件中定义 props
  • 在子组件中使用 defineProps 来定义接收的属性

// children.vue
<template>
<div>{{ name }}: {{age}}</div><div>{{personal.address}} {{personal.sex}}</div><div v-for="(item,index) in list" :key="index">{{item.phone}}</div>
</template><script lang="ts" setup>
interface Phone {phone: string;
}
interface ChildProps {name: string;age: number;
}
const props = defineProps(['name','age','personal','list'])
// 或者
const props= defineProps({name: {type: String as PropType<string>,default: () => {return ''}},age:{type: Number as PropType<number>,default: () => {return 0}  },personal:{type: Object,default: () => {return {}}  },list:{type: Array as () => User[],default: () => {return []}  }
})
</script>
在父组件中传递参数
  • 在父组件中使用子组件的标签,并通过属性传递数据:
  // parent.vue<template><childrenTemplate :name="name" :age="age" :personal="personal" :list="list"></childrenTemplate></template><script lang="ts" setup>import childrenTemplate from './components/children.vue'let name = ref('小涨')let age = ref(8)let personal = reactive({address:'上海',sex:'女'})let list = ref([{phone:'1111111'},{phone:'2222222'}])</script>

defineEmits 子组件向父组件传参

  • 在子组件中定义事件
    • 在子组件中,使用 defineEmits 定义事件,并通过 emit 方法触发事件

// children.vue
<template>
<div>{{ name }}: {{age}}</div><div>{{personal.address}} {{personal.sex}}</div><div v-for="(item,index) in list" :key="index">{{item.phone}}</div><el-button @click="handleChangeParent">改变名字</el-button><el-button @click="handleChangeParent2">改变年龄</el-button>
</template><script lang="ts" setup>
interface Phone {phone: string;
}
interface ChildProps {name: string;age: number;
}
const props = defineProps(['name','age','personal','list'])
// 或者
const props= defineProps({name: {type: String as PropType<string>,default: () => {return ''}},age:{type: Number as PropType<number>,default: () => {return 0}  },personal:{type: Object,default: () => {return {}}  },list:{type: Array as () => User[],default: () => {return []}  }
})
const $emit = defineEmits(['childClick','childChangeName']);
const handleChangeParent = ()=>{$emit('childClick',43)
}
const handleChangeParent2 = ()=>{$emit('childChangeName','小明')
}
</script>
  • 在父组件中监听事件
    • 在父组件中监听子组件触发的事件,并处理数据或者触发相应的方法。
  // parent.vue<template><childrenTemplate :name="name" :age="age" :personal="personal" :list="list" @child-click="handleEmit" @child-change-name="handleGet"></childrenTemplate></template><script lang="ts" setup>import childrenTemplate from './components/children.vue'let name = ref('小涨')let age = ref(8)let personal = reactive({address:'上海',sex:'女'})let list = ref([{phone:'1111111'},{phone:'2222222'}])const handleEmit = (val:number)=>{age.value =val}const handleGet = (val:string)=>{name.value = val}</script>
关键字:vue3 学习笔记10 -- 父子传参

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: