美文网首页
vue 组件通信

vue 组件通信

作者: 杨晨1994 | 来源:发表于2020-04-14 14:00 被阅读0次

一、什么是组件化

组件系统是 Vue 的一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。
组件化可以使代码复用,维护性高,方便测试

二、父组件 => 子组件

  • 属性props
// 子组件通过props接受父组件传过来的值
props:{
  msg:String
}
// 父组件传值给子组件
<hello-world msg="hellow"></hello-world>
  • 引用refs 获取子组件的值
<hello-world ref="hello" msg="hello"></hello-world>
console.log(this.$refs.hello.msg)

这里注意一点这里获取的是组件节点,如果你想获取dom元素节点要加上$el

三、子组件 => 父组件(自定义事件)

// 子组件派发一个事件(handleClick),传参数为(success)
this.$emit('handleClick','success')
// 父组件监听(handleClick)事件,并做事件的回调处理event就是子组件传过来的参数
<hello-world msg="hello" @handleClick="handleClickParent(event)"></hello-world>

四、兄弟组件通信(通过共同祖辈搭桥$parent或者$root)

//子组件1
this.$parent.$emit('add',1)
//子组件2
this.$parent.$on('add', (val) => {
  console.log(val)
})

五、兄弟组件通信(通过bus总线)

这种方式其实和上面那种差不多少

// main.js
Vue.prototype.$bus =new Vue();
//子组件1
this.$bus.$emit('add',1)
//子组件2
this.$bus.$on('add', (val) => {
  console.log(val)
})

六、祖先和后代多层传值

  • 由于嵌套层数过多,用props不太现实,vue提供了provide/inject来实现该操作
// 祖先
provide () {
  return {
    msg:'hello'
  }
}
// 后代
inject:['msg']

注意:provide/inject主要在高阶插件或组件库里面使用,尽量不要直接应用在程序代码中

  • dispatch 后代向祖先传值

vue当中后代给祖先传值是不行的,所以我们手动写一个dispatch方法

// 实现方法
methods:{
  dispatch(eventName,data,name){
    let parent = this.$parent;
    while (parent){
      if(parent){
        if(parent.$options.name === name){ // 这一步主要是判断在哪一个父组件派发
            parent.$emit(eventName,data);
            break
          }else{
            parent = parent.$parent
          }
      }else{
        break
      }
    }
  }
}
// 调用
<button @click="dispatch('add',1,'Home')">点击</button>
// 祖先组件监听
mounted () {
  this.$on('add',(val)=>{
    console.log(val)
  })
 }

七、vuex

上面那几种方式只适合小项目或者组件之间相互传值,真正工作中的大型项目还是要用vuex中的store来管理全局数据,并通知组件状态变更。这里我就不多说了,说的话一篇文章也讲不完关于vuex的使用,这里我们只是简单地介绍了这几种模式,更深层次的功能还需要自己研究

相关文章

  • vue组件之间通信

    vue 组件之间通信 vue组件之间通信方式: 1.父组件通过props向下传数据给子组件,子组件通过$emit事...

  • 【Vue】组件通信(任意通信)

    本节所需的基础知识: 【Vue】组件通信(父传子props) 【Vue】组件通信(子传父$emit) 任意组件相互...

  • vue 组件通信方式 ,父子、隔代、兄弟 三类通信,六种方法

    Vue 组件间通信只要指以下 3 类通信:父子组件通信、隔代组件通信、兄弟组件通信,下面分别介绍每种通信方式且会说...

  • Vue相关知识点

    1、vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不...

  • Vue如何实现组件通信?

    Vue组件通信的三种情况: 父子通信 爷孙通信 兄弟通信 父子通信:父组件使用Prop向子组件传递数据,子组件通过...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • Vue组件通信

    Vue组件通信 Vue组件关系可分为三大类: 父子组件 兄弟组件 跨级组件, 相应的组件之间的通信也分类三大类: ...

  • vue组件间通信的一些实用方法(VUE2.x)

    vue组件间通信的一些实用方法(VUE2.x) 一、父子组件间通信 常用的父子组件通信方法,一般涉及props和$...

  • vue组件通信(传值)

    1.父子通信 1.父组件(parent.vue) 子组件(child.vue) 2.子父通信 1.子组件(chil...

  • Vue组件通信

    总体来说,Vue中组件之间的通信场景如下图: 可以将其分为父子组件通信、兄弟组件通信、跨级组件通信。 1. 自定义...

网友评论

      本文标题:vue 组件通信

      本文链接:https://www.haomeiwen.com/subject/arogmhtx.html