Vue中关于父子组件之间的通信

一、概要

在vue中,父子组件的关系可以总结为prop向下传递,事件向上传递。父组件通过prop给子组件下发数据,子组件通过事件给父组件发送信息。

父子组件传值

二、实现方式
1、通过 Prop 向子组件传递数据

如何在组件上注册的一些自定义 attribute,Vue为我们提供了 props 数据选项。我们能够在组件实例中访问这个值,就像访问 data 中的值一样。

  • 父组件
  <div>
    <child title="标题"></child>
  </div>
  • 子组件
  <div>{{ title }}</div>
  props: {
    title: {
      type: String,
      default: null
    }
  }
  console.log(this.title) // 标题
2、通过 $emit 向父组件发送信息

如何在组件上注册的一些自定义 event,Vue为我们提供了 $on 和 $emit 事件实例方法。

  • vm.$on 监听当前实例上的自定义事件。

  • vm.$emit 触发当前实例上的自定义事件。

  • 回调函数会接收所有传入事件触发函数的额外参数。

   vm.$on('event', function (msg) {
     console.log(msg) // hello
   })
   vm.$emit('event', 'hello')
  • 父组件
  <div>
    <child @childEvent="parentEvent"></child>
  </div>
  parentEvent(value){
     console.log(value)  // 我是子组件传递的值
  }
  • 子组件
  <div>
    <button @click="handleClick('我是子组件传递的值')">点击触发事件</button>
  </div>
  handleClick(value) {
     this.$emit('childEvent',value)
  }
三、props 配置

props 可以是数组或对象,用于接收来自父组件的数据。

  • 基于对象的语法使用以下选项:
选项描述
typeString、Number、Boolean、Array、Object、Date、Function、Symbol、任何自定义构造函数、或上述内容组成的数组会检查一个 prop 是否是给定的类型,否则抛出警告
defaultany为该 prop 指定一个默认值。如果该 prop 没有被传入,则换做用这个值。对象或数组的默认值必须从一个工厂函数返回。
requiredBoolean定义该 prop 是否是必填项。在非生产环境中,如果这个值为 truthy 且该 prop 没有被传入的,则一个控制台警告将会被抛出。
validatorFunction自定义验证函数会将该 prop 的值作为唯一的参数代入。在非生产环境下,如果该函数返回一个 falsy 的值 (也就是验证失败),一个控制台警告将会被抛出。
四、其他通信方式
1、通过 Function Prop 向父组件发送信息

父组件通过 在子组件定义 Function 类型的 Prop,传递给子组件一个函数(含参数),子组件通过调用该函数,来传递相应的数据。

  • 父组件
  <div>
    <child :parentFunc="parentFunc"></child>
  </div>
  parentFunc(value){
    console.log(value)  //  我是子组件传给父组件的值
  }
  • 子组件
  <div>
    <button @click="clickHandle('我是子组件传给父组件的值')">
        点击调用父组件传过来的函数
    </button>
  </div>
  props: {
    parentFunc: {
      type: Function
    }
  },
  methods: {
    clickHandle(value) {
      this.parentFunc(value)
    }
  }

2、通过 $ref 调用子组件方法 向子组件传递数据

通过 $ref 可以获取到子组件的全部信息,包括子组件定义的一些方法,继而可以通过调用子组件方法来传递数据。

  • 父组件
  <div>
    <child ref="child"></child>
    <button @click="clickHandle('我是父组件传给子组件的值')">
    	点击调用子组件方法
    </button>
  </div>
  clickHandle(value) {
    this.$refs.child.getValue(value)
  }
  • 子组件
  methods: {
    getValue(value){
      console.log(value)  //  我是父组件传给子组件的值
    }
  }

参考地址:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值