前面讲过通过props子组件很容易就可以获取到父组件的数据,但是父组件怎么获取子组件的数据呢?通过查资料,发现可以通过自定义事件来实现父组件与子组件之间的通信。
首先,得创建一个子组件模板文件,子组件在父组件中用的时候,总得有个触发动作可以获取到子组件的数据吧,所以,加个按钮,触发个动作。如下所示:
![](https://img.haomeiwen.com/i7708735/b7dc965884f2c4bc.png)
然后再子组件中定义下数据,不然父组件没有数据可以获取
![](https://img.haomeiwen.com/i7708735/88089b3c416f52dc.png)
点击button时,将子组件的数据发送给父组件,这时需要用到$emit
![](https://img.haomeiwen.com/i7708735/a1847f4ba034d291.png)
然后,在父组件中首先要引入子组件
![](https://img.haomeiwen.com/i7708735/531159fff77e8e34.png)
![](https://img.haomeiwen.com/i7708735/d7b6dc09e3ad65bd.png)
接收完数据后,就在页面上渲染展示
![](https://img.haomeiwen.com/i7708735/891a56313d78a9a3.png)
结果:
![](https://img.haomeiwen.com/i7708735/0fb6d799241051fa.png)
最后,把代码贴出来:
child.vue
<template>
<div>
<button @click="emitData">点我获取子组件的数据哦</button>
</div>
</template>
<script>
export default {
data () {
return {
child_data: '我是你的孩子哦'
}
},
methods: {
emitData () {
this.$emit('child-event', this.child_data)
}
}
}
</script>
App.vue
<template>
<div>
<v-child @child-event="getBData"></v-child>
{{child_data}}
</div>
</template>
<script>
import child from './components/child.vue'
export default {
data () {
return {
child_data: ''
}
},
components: {
'v-child': child
},
methods: {
getBData (param) {
this.child_data = param
}
}
}
</script>
网友评论