对于初学vue的同学,遇到的一个问题就是父子组件间如何通信。父组件调用一个子组件,父组件的属性如何能够传递给子组件使用,子组件里的数据如何能传递给父组件?下面我们通过一个demo来解答这个问题。
父组件
<template>
<div class="parent">
我是父组件
<!--父组件监听子组件触发的say方法,调用自己的parentSay方法-->
<!--通过:msg将父组件的数据传递给子组件-->
<children :msg="msg" @say="parentSay"></children>
</div>
</template>
<script>
import Children from './children.vue'
export default {
data () {
return {
msg: 'hello, children'
}
},
methods: {
// 参数就是子组件传递出来的数据
parentSay(msg){
console.log(msg) // hello, parent
}
},
// 引入子组件
components:{
children: Children
}
}
</script>
子组件
<template>
<div class="hello">
<div class="children" @click="say">
我是子组件
<div>
父组件对我说:{{msg}}
</div>
</div>
</div>
</template>
<script>
export default {
//父组件通过props属性传递进来的数据
props: {
msg: {
type: String,
default: () => {
return ''
}
}
},
data () {
return {
childrenSay: 'hello, parent'
}
},
methods: {
// 子组件通过emit方法触发父组件中定义好的函数,从而将子组件中的数据传递给父组件
say(){
this.$emit('say' , this.childrenSay);
}
}
}
</script>
结果
总结
vue的父子组件间通信可以总结成一句话:
父组件通过 prop
给子组件下发数据,子组件通过$emit
触发事件给父组件发送消息,即 prop
向下传递,事件向上传递。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。