对于初学vue的同窗,遇到的一个问题就是父子组件间如何通讯。父组件调用一个子组件,父组件的属性如何可以传递给子组件使用,子组件里的数据如何能传递给父组件?下面咱们经过一个demo来解答这个问题。vue
<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
向下传递,事件向上传递。函数