组件通信方案、父传子、子传父

组件通信是指 组件与组件 之间的数据传递。

组件的数据是独立的,无法直接访问其他组件的数据,想用其他组件的数据,需要通过组件通信方案。

 

组件关系分类:父子关系、非父子关系

 

组件通信方案:

父子关系:props(父传子) 和 $emit(子传父)

非父子关系:① provide & inject

                      ② eventbus

父子关系 与 非父子关系 的通用通信方案:Vuex(适合复杂业务场景)

 

详细演示:

1. 父子关系——父传子:

①父组件中给 template 中引入的组件标签 添加属性的方式 传值(myTitle 为父组件的 data 函数中定义的变量,如:myTitle = ' 黑马程序员 ')

   <Son   :title = "myTitle"></Son>   

②子组件中 通过 props 进行接收

<script>

export  default  {

      props : [ 'title' ]   // 属性名 title 要与 父组件 中 给子组件标签添加的属性值 title 保持一致,表示接受过来的是 黑马程序员

}

</script>

③子组件中渲染使用

<template>

      <div>

            {{ title }}

      </div>

</template>

 

2. 父子关系——子传父:

子组件利用 $emit 通知父组件,进行修改更新:子组件中可以准备一个按钮,在按钮的点击事件里,通过 $emit 来触发事件,给父组件发送消息通知;一旦发送了消息通知之后,父组件需要对子组件所发送的消息进行监听,比如子组件的 $emit 中起名叫 changeTitle,那么父组件就需要对 changeTitle 进行监听,监听的目的就是为了收到传过来的消息,并且父组件提供一个处理函数,在处理函数的形参中就可以拿到传过来的消息,拿到后就可以更新到 myTitle 里面去了。

 

①子组件中定义按钮,注册点击事件,点击事件中通过 $emit 向父组件发送消息通知:

<button @click="changeFn">修改title</button>
---------------------------------------------------------------------
export default {
  props: ['title'],

  methods: {
    changeFn(){
      this.$emit('changeTitle', '传智教育')   // 事件名自定义成 changeTitle,我们想要把父组件的 myTitle 变量的值 由 黑马程序员 改成 传智教育
    }
  }
}
 

②父组件对消息进行监听

// changeTitle:跟子组件中自定义的事件名 同名;handleChange:父组件的处理函数,名字自定义,然后在父组件的methods中实现该函数的逻辑,在形参中就可以拿到 传智教育,再更新到myTitle 里。

<Son  :title="myTitle"  @changeTitle="handleChange"></Son>   
-----------------------------------------------------------------------------------------
methods: {
        handleChange(newTitle){
          this.myTitle = newTitle
        }
      }

 

posted @   1stzz1  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示