提示:先了解defineProps,和defineEmites
defineProps 等同与vue2 的props
语法:
defineProps({
xxx:{
type:类型,
default:xxx
}
})
defineEmites
语法:
const emit = defineEmites(["xxx"])
// 触发事件
const btn = () => {
emit("xxx",需要传的值)
}
//父组件
<template>
<div>
<common-child :msg1="age"></common-child>
</div>
</template>
<script setup>
//引入子组件
import CommonChild from '../components/CommonChild.vue'
let bb = reactive({
name:"xiaoming",
age:18
})
let {name , age} = toRefs(bb)
</script>
//子组件
<template>
<div>
我是vue3子组件+{{ props.msg1 }}
</div>
</template>
<script setup>
let props = defineProps({
msg1:{
type:Number,
}
})
</script>
//父组件
<template>
<div>
<common-child :msg1="age"></common-child>
<button @pbtn="getChild">按钮</button>
{{txt}}
</div>
</template>
<script setup>
//引入子组件
import CommonChild from '../components/CommonChild.vue'
let bb = reactive({
name:"xiaoming",
age:18
})
let {name , age} = toRefs(bb)
let txt = ref("")
//拿到子传给父亲的值 并赋值给txt
const getChild = (value) => {
txt.value = value
}
</script>
//子组件
<template>
<div>
我是vue3子组件+{{ props.msg1 }}
<button @click="btn">按钮</button>
</div>
</template>
<script setup>
let props = defineProps({
msg1:{
type:Number,
}
})
let str = ref("我是子组件传过来的值")
const emit = defineEmites(["pbtn"])
const btn = () => {
emit("pbtn",str)
}
</script>
引入第三方库mitt,在src目录下创建plugins文件夹,在文件夹里面创建Bus.js文件
代码如下(Bus.js):
import mitt from 'mitt'
const emiter = mitt()
export default emiter
代码如下(示例):
<template>
<div>
哥哥组件
<button @click="handel2">按钮</button>
</div>
</template>
<script setup>
import emiter from "../plugins/Bus.js"
let txt = ref("传给弟弟的值")
const handel2 = () => {
emiter.emit("cfn",txt)
}
</script>
代码如下(示例):
<template>
<div>
我是弟弟组件
{{str}}
</div>
</template>
<script setup>
import emiter from '../plugins/Bus.js'
let str = ref("")
//这里可以拿到e.value 是哥哥组件传给弟弟的值,并赋值给str
onBeforeMount(()=>{
emiter.on("cfn",e=>{
str.value = e.value
})
})
</script>
子组件
<template>
<div>
我是vue3子组件+{{ props.msg1 }}
<button @click="handel1">按钮1</button>
</div>
</template>
<script setup>
let props = defineProps({
msg1:{
type:Number,
}
})
const emit = defineEmits(["update:msg1"])
const handel1 = () => {
console.log(111);
emit("update:msg1",200)
}
</script>
父组件
<template>
<div>
<common-child v-model:msg1="age"></common-child>
</div>
</template>
<script setup>
import CommonChild from '../components/CommonChild.vue'
let bb = reactive({
name:"xiaoming",
age:18
})
let {name , age} = toRefs(bb)
</script>
在defineEmites(),中传入固定参数update:某父组件传来的值,就可以修改父组件的值