vue2.0父子组件通信

效果图
传值前:
在这里插入图片描述
传值后:

在这里插入图片描述

1.父组件向子组件传值的两种情况
a.给子组件传静态的值:

<blog-post title="My journey with Vue"></blog-post>

比较简单,不再赘述
b.动态的值,v-bind绑定,简写 使用 :
动态传值可以传数字,布尔型,数组,对象等,本文以传对象的两种方式为例,顺便包含传字符串,布尔值两种情况。
第一种:
父组件代码:

<template>
    <div>
      <p>父组件</p>
      id:<input v-model="user.id" /><br>
      name:<input v-model="user.name" />
      <!--子组件引入-->
      <sonComponent :id="user.id" :name="user.name" :onlineStatus="user.onlineStatus"></sonComponent>
      <!--<sonComponent :user="user"></sonComponent>-->
    </div>
</template>

<script>
  import sonComponent from './sonComponent.vue'
    export default {
        name: "fatherComponent",
        components:{
          sonComponent
        },
        data(){
          return{
            user:{
              id:'',
              name:'',
              onlineStatus:true,
            }
          }
        }
    }
</script>

<style scoped>

</style>

注意:父组件中要引入子组件并引用,参见图片:
在这里插入图片描述
子组件代码:

<template>
  <div>
    <p>子组件</p>
    id:<span>{{id}}</span><br>
    name:<span>{{name}}</span>

  </div>
</template>

<script>
    export default {
        name: "sonComponent",
        props:{
          id:String,
          name:String,
          onlineStatus:Boolean
        }
    }

</script>

<style scoped>

</style>

注意:
组件实例的作用域是孤立的;子组件要显式的用props选项声明它预期的数据。参见图片:
在这里插入图片描述
第二种情况:
父组件中注释上一行,变成以下情况
在这里插入图片描述
子组件中:

<template>
  <div>
    <p>子组件</p>
    user.id:<span>{{user.id}}</span><br>
    user.name:<span>{{user.name}}</span><br>

  </div>
</template>

<script>
    export default {
        name: "sonComponent",
        props:{
          user:Object
        }
    }

</script>

<style scoped>

</style>

最终效果:
在这里插入图片描述
谨记:单向数据流,父级 prop 的更新会向下流动到子组件中,但是反过来则不行

2.子组件向父组件传值

$emit(event,[...args])	

子组件通过$emit触发父组件上绑定的自定义事件,将自身数据作为参数传入事件函数,在父组件的事件函数中将参数赋值给父组件的对应变量

在这里插入图片描述
子组件代码:

<template>
  <div>
    <p>子组件</p>
    父组件传来的值:<br>
    user.id:<span>{{user.id}}</span><br>
    user.name:<span>{{user.name}}</span><br>
    <input v-model="message"><button @click="send">Send to Father</button>
  </div>
</template>

<script>
    export default {
        name: "sonComponent",
        props:{
          user:Object
        },
      data(){
          return{
            message:''
          }
      },
      methods:{
          send:function(){
            this.$emit('sonSendMessage',this.message)
          }
      }
    }
</script>

<style scoped>

</style>

父组件:
在这里插入图片描述
父组件代码:

<template>
    <div>
      <p>父组件</p>
      id:<input v-model="user.id" /><br>
      name:<input v-model="user.name" /><br>
      子组件传来的值:<span>{{message}}</span>
      <!--子组件引入-->
      <!--<sonComponent :id="user.id" :name="user.name" :onlineStatus="user.onlineStatus"></sonComponent>-->
      <sonComponent :user="user" @sonSendMessage="getMessage"></sonComponent>
    </div>
</template>
<script>
  import sonComponent from './sonComponent.vue'
    export default {
        name: "fatherComponent",
        components:{
          sonComponent
        },
        data(){
          return{
            user:{
              id:'',
              name:'',
              onlineStatus:true,
            },
            message:'',
          }
        },
      methods:{
        getMessage:function (payLoad) {
          this.message = payLoad
        }
      }
    }
</script>

<style scoped>

</style>

总结:

子组件向父组件传值----中间介质----自定义事件
父组件向子组件传值—中间介质-----props中的属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值