VUE父子组件之间的通信

2020-07-02 11:29:41 浏览数 (1)

在写组件嵌套过程中,必然涉及到父子组件之间的通信问题,父组件向子组件传递很简单,可以通过props来实现。

父组件向子组件传递参数

先来看父组件:

代码语言:javascript复制
<template>
    <Son :childCom="content"></Son> 
</template>
<script>
import Son from './son'
  export default{
  name:"father",
  data(){
    return {
        content:'落帆亭'
    }
  },
  components:{
   Son
  },
}
</script>

子组件接收需要在porps对象中定义一下,有两种方式可以进行定义

第一种,只定义接收名,不进行类型校验:

代码语言:javascript复制
<template>
   <div>{{msg}}</div>
    <div>{{childCom}}</div>
</template>
<script>
  export default{
  name:"son",
  data(){
    return {
        msg:"这里是子元素"
    }
  },
  props:["childCom"]
}

</script>

另一种方式是进行类型校验,如果类型不一致,则会进行报错:

代码语言:javascript复制
<template>
   <div>{{msg}}</div>
    <div>{{childCom}}</div>
</template>
<script>
  export default{
  name:"son",
  data(){
    return {
        msg:"这里是子元素"
    }
  },
  props:{
     childCom:{
        type:String,
        default:"默认字符"//这里是提供默认值,如不需要可不添加
     }
  }
}
</script>

子组件向父组件传递参数

子组件向父组件传递有两种方式,先说第一种

$emit

父子组件使用emit和v-on时,子组件使用emit触发,父组件在实例中v-on自定义事件监听。

父组件:

代码语言:javascript复制
<template>
    <Son :childCom="content" @sendMsg="getMsg"></Son> 
</template>
<script>
import Son from './son'
  export default{
  name:"father",
  data(){
    return {
        content:'落帆亭'
    }
  },
  methods:{
    getMsg(data){
     console.log(data);
    }
  },
  components:{
   Son
  },
}
</script>

子组件

代码语言:javascript复制
<template>
   <div>{{msg}}</div>
    <div>{{childCom}}</div>
   <button @click="sendMessage">发送数据</button>
</template>
<script>
  export default{
  name:"son",
  data(){
    return {
        msg:"这里是子元素"
    }
  },
   methods:{
	sendMessage(){
	    this.$emit("sendMsg",this.msg);			
	}
   },
  props:{
     childCom:{
        type:String,
        default:"默认字符"//这里是提供默认值,如不需要可不添加
     }
  }
}
</script>

调用父组件方法

第二种方法就是直接调用父组件的方法,通过方法参数传递的方式来进行数据交互,原理就在于父组件将其自身的方法通过props传递给子组件,子组件调用传参即可。

父组件:

代码语言:javascript复制
<template>
    <Son :childCom="content" :fatherClick="getMsg"></Son> 
</template>
<script>
import Son from './son'
  export default{
  name:"father",
  data(){
    return {
        content:'落帆亭'
    }
  },
  methods:{
    getMsg(data){
     console.log(data);
    }
  },
  components:{
   Son
  },
}
</script>

子组件:

代码语言:javascript复制
<template>
   <div>{{msg}}</div>
    <div>{{childCom}}</div>
   <button @click="sendMessage">发送数据</button>
</template>
<script>
  export default{
  name:"son",
  data(){
    return {
        msg:"这里是子元素"
    }
  },
   methods:{
	sendMessage(){
	    this.fatherClick(this.msg);			
	}
   },
  props:{
     childCom:{
        type:String,
        default:"默认字符"//这里是提供默认值,如不需要可不添加
     },
     fatherClick:{
        type:Function
     }
  }
}
</script>

以上几种方式就是在vue中父组件和子组件之间的数据传递

0 人点赞