Vue父子组件通信方式大盘点_父组件在用子组件的地方_子组件接收到这个信息后就会知道大哥给了它什么数据

Vue父子组件通信方式大盘点

通过props传递数据


父组件就像一个慷慨的大哥,可以通过props这个属性把数据传给子组件。父组件在用子组件的地方,就像给朋友发信息一样,把数据绑定在属性上。子组件接收到这个信息后,就会知道大哥给了它什么数据。

父组件 子组件
<ChildComponent :message="parentData" /> props: ['message']

通过$emit发送消息


子组件有时候需要给父组件发个消息,这时候就可以用$emit。子组件通过这个方法触发一个事件,父组件可以通过监听这个事件来得知子组件的动态。

子组件 父组件
this.$emit('custom-event', data) @custom-event="handleData"

通过$refs获取子组件实例


如果父组件需要直接操作子组件,比如调用它的方法或访问它的属性,就可以使用$refs。就像在朋友家中找个人一样,你可以在父组件中用$refs找到子组件的实例。

  1. 在父组件中给子组件绑定一个ref属性。
  2. 通过这个ref属性,父组件就可以直接访问子组件的实例了。

通过Provide/Inject进行祖孙组件通信


当需要跨越多层组件传递数据时,provide/inject就像一个中间人,可以把数据从顶层组件传递到底层组件。

祖组件 父组件 孙组件
provide: 'key', value: data inject: ['key'] inject: ['key']

了解了这些方法,你就可以根据实际情况选择合适的通信方式了。props和$emit是最常用、最直观的,而$refs和Provide/Inject则适用于特定的场景。

建议在开发中,尽量保持组件的独立性和封装性,不要滥用$refs和Provide/Inject。通过合理设计组件结构和数据流,使用props和$emit,可以让你的代码更清晰、更容易维护。

FAQs


1. 父组件如何向子组件传递数据?

父组件通过在子组件标签上使用v-bind指令将数据绑定到子组件的props属性上。子组件在props选项中声明接收的属性。

父组件:

<ChildComponent :message="parentData" />



子组件:

props: ['message']

2. 子组件如何向父组件传递数据?

子组件可以使用$emit方法触发一个自定义事件,并将数据作为参数传递给父组件。父组件使用v-on指令监听子组件触发的自定义事件。

子组件:

this.$emit('custom-event', data)



父组件:

@custom-event="handleData"

3. 父组件和子组件如何进行双向数据绑定?

Vue提供了v-model指令来实现双向数据绑定。在父组件中,可以在子组件标签上使用v-model指令,并将父组件中的数据绑定到v-model指令上。

父组件:

<ChildComponent v-model="message" />



子组件:

props: ['value']

watch: {

  value(newVal) {

    this.$emit('input', newVal)

  }

}