首先在子组件中定义传递消息的button和一个属性data_send,然后定义传递函数
(核心就是 $emit('自定义事件') 函数)
methods:{
//传递数据函数
sendMsg(){
this.data_send = "learn 传递的数据"
//第一个参数表示父组件响应传递事件的函数,第二个参数是传递的数据
this.$emit('getSon',this.data_send);
}
}
接下来在父组件中定义接收事件getSon
<template> <div id="app"> <img src="./assets/logo.png"> <p>{{datafromson}}</p> <hr > <!-- 父传子 需要自定义事件getSon然后赋给实现getSonData--> <Learn @getSon='getSonData' :title='title' /> </div> </template>
接下来是getSonData的实现
methods:{
//一个参数用于传递子组件过来的数据
getSonData(data){
this.datafromson = data;
}
}
完整代码如下,两个组件Learn传递数据给App
Learn:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<template> <div id="0-1-0"> <p>{{msg}}-{{title}}</p> <button @click='sendMsg' type="button">子传父</button> </div> </template> <script> export default { //name是名称,可写可不写 name:'learn', //data是组件的所有字段定义和初始化,类似于构造函数 data(){ return { msg:'welcomen to my learn component', data_send:"", } }, props:['title'], methods:{ //传递数据函数 sendMsg(){ this.data_send = "learn 传递的数据" //第一个参数表示父组件响应传递事件的函数,第二个参数是传递的数据 this.$emit('getSon',this.data_send); } } } </script> <!-- 使用scoped进行css隔离 --> <style lang="css" scoped> </style>
App:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<template> <div id="app"> <img src="./assets/logo.png"> <p>{{datafromson}}</p> <hr > <!-- 父传子 需要自定义事件getSon然后赋给实现getSonData--> <Learn @getSon='getSonData' :title='title' /> </div> </template> <script> //组件的使用分三步 1.import .vue扩展名可以省略 2.components 注册 3.标签化引用 import HelloWorld from './components/HelloWorld' import VueDemo from './components/VueDemo' import Learn from './components/Learn' export default { name: 'App', components: { HelloWorld, VueDemo, Learn, }, data(){ return { title:'title from App.vue', datafromson:"", } }, methods:{ //一个参数用于传递子组件过来的数据 getSonData(data){ this.datafromson = data; } } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>