一,父传子------defineProps
方法:
在父组件的模板中使用子组件标签,并且给标签自定义属性和属性名,即通过v-bind
绑定数值,而后传给子组件;子组件则通过defineProps
接收使用。
父组件:
<template>
<div >
<div>我是父组件</div>
<<SonCom :fatherProp="msg" ></SonCom> -
</div>
</template>
<script setup lang='ts'>
import SonCom from '@/components/SonCom.vue'; // 引入子组件
import { ref } from 'vue';
const msg = ref<string>('coderkey')
</script>
子组件:
<template>
<div >
<div>我是子组件</div>
</div>
</template>
<script setup lang='ts'>
import { defineProps } from 'vue';
let prop = defineProps({
fatherProp: {
required: true,
type: String,
default: 'pink',
}
})
console.log(prop.fatherProp) // coderkey
</script>
二,子传父------defineEmits
方法:
defineEmits['自定义事件名']
子组件中通过emit
调用父组件中的自定义事件,给父组件的这个方法里传入数据数据。
父组件:
<template>
<div >
<div>我是父组件</div>
<<SonCom :fatherProp="msg" @update:fatherProp="fatherClick"></SonCom> -
</div>
</template>
<script setup lang='ts'>
import SonCom from '@/components/SonCom.vue'; // 引入子组件
import { ref } from 'vue';
const msg= ref<string>('coderkey')
const fatherClick = (data:any) => {
console.log(data); // 子组件传递数据给父组件
}
</script>
子组件:
<template>
<div >
<div>我是子组件</div>
<button @click="sendDateHandle">子传父数据</button>
</div>
</template>
<script setup lang='ts'>
import { defineProps,defineEmits } from 'vue';
let prop = defineProps({
fatherProp: {
required: true,
type: String,
default: 'pink',
}
})
console.log(prop.msg) // coderkey
let emit = defineEmits(['update:fatherProp'])
const sendDateHandle = () => {
emit('update:fatherProp','子组件传递数据给父组件')
}
</script>