子组件向父组件传递数据的案例主要使用到的是自定义事件的方式
简单的说,子组件不能直接发送数据到父组件,就需要定义一个自定义事件,这个事件的作用是发送数据到父组件
子组件中的内容
<!--实现自定义组件的内容-->
<template>
<div>
<!-- 子组件向父组件传递数据(使用自定义事件的方式)-->
<button type="button" @click="SendValue">发送数据</button>
</div>
</template>
<script>
export default {
name: "Custom_Components",
data(){
return {
name:'子组件'
}
},
methods:{
SendValue(){
this.$emit('sendValue',this.name)
}
}
}
</script>
<style scoped>
</style>
父组件中的内容
<template>
<div id="app">
<CustomComponents @sendValue="getValue">
</CustomComponents>
<p>来自子组件的数据:{{s_name}}</p>
</div>
</template>
<script>
import CustomComponents from "@/components/CustomComponents";
export default {
name: 'App',
components: {
CustomComponents
},
data(){
return {
s_name:''
}
},
methods:{
getValue(s_value){
console.log("收到了名字:"+s_value)
this.s_name = s_value
}
}
}
</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>
具体实现
在自定义组件中,使用v_on指令绑定自定义事件,简写为@ 在父组件中的子组件标签中定义一个自定义事件,形式为:@自定义事件名=“方法名” 其中方法名决定的是接受并处理子组件中传递来的数据,所以这个方法要写在父组件中 在方法中需要有一个参数表示接收到的值,所以这个方法的格式应该是: 方法名:(参数){逻辑处理语句} 在子组件中,需要写一个按钮,并绑定一个点击事件,点击事件的值就是自定义事件名: <button type=button @click=“自定义事件名”>传递数据</button> 而自定义事件的触发实际就是当点击事件触发的时候也触发了绑定的自定义事件,自定义事件的触发需要一个关键字:$emit 自定义事件的本质也是一个方法,所以要写在methods节点中,所以一个简单的自定义事件的定义应该写成:
methods:{
方法名(){
this.$emit('自定义事件名',传递的数据)
}
}
而在父组件中,应该写成
methods:{
方法名(参数){
逻辑处理语句
}
}