美文网首页
Vue的组件通信

Vue的组件通信

作者: zjh111 | 来源:发表于2018-04-10 20:12 被阅读0次

Vue的父子通信问题

参考文档 :

原理:

image

父子组件之间通信

例子代码 Demo

目的:点击打开显示 div.son,点击关闭隐藏 div.son

image

我们可以看到,父元素里面有一个子元素,使用在父元素中点击按钮控制子元素的展现和隐藏。

但是,在子元素中却无法对自己进行操作,因为它的显示是由它父元素决定。而 button 无法控制 child

此时,解决办法为:

  • button元素中添加事件,<button @click="$emit('close')">关闭</button>

  • 父元素child中添加监听,<child v-show="visible" @close="visible=!visible"></child>

  • 代码为: Demo

    如图: ​

    image

爷孙组件之间通信

上面我们演示了爸爸和儿子之间的通信,接下来我们来探索爷爷和儿子之间的通信

目的,爷爷控制孙子的状态,同时,孙子控制爷爷的状态

image

这里,我们看到,从爷爷到孙子,中间经过了爸爸,因此,爷爷先要控制爸爸,然后爸爸控制儿子,即:

  • 爷爷控制爸爸,爸爸控制儿子,即可实现爷爷控制孙子: 即爷爷和爸爸之间,通过在爷爷的data 中保存 xxx 变量控制 孙子的显示状态 visible
  • 代码为: Demo

image
  • 同理,孙子要控制爷爷,那就要孙子告诉爸爸,爸爸再告诉爷爷,即:

    孙子事件冒泡给爸爸,爸爸再冒泡给爷爷,使用事件监听的方式逐级冒泡

image

兄弟组件之间通信

以下演示的是错误的答案:

以上实现了父子通信和爷孙通信,接下来的兄弟之间的通信就简单的多了

代码: Demo

效果如图

image

正确的方法为:

代码:Demo

<body>
 <div id="app">
   <component-a></component-a>
   <component-b></component-b>
 </div>

  /*
  vue 代码如图所示
  */
let eventHub = new Vue()
Vue.prototype.$eventHub = eventHub

Vue.component('component-a',{
  template: `
<div>a<button @click="notify">button</button></div>
`,
  methods:{
    notify(){
//       this.__proto__ === Vue.prototype
      this.$eventHub.$emit('xxx','hi')
      console.log(12312312)
    }
  }
})

Vue.component('component-b',{
  template: `
  <div>b<div ref=output></div></div>
`,
  created(){
    this.$eventHub.$on('xxx',(data)=>{
      this.$refs.output.textContent = data
    })
  }
})

let app = new Vue({
  el: '#app',
})

具体使用的原理类似于 发布订阅模式 ,但是这里 需要把 eventHub 绑定到 Vue 的原型上,从而使得不同的组件可以相互通信。

小结:

我们发现,父子通信到爷孙通信 ,核心还是“父子通信” ,那么爷爷的爷爷和孙子的孙子通信怎么办?按照Vue的 文档要求只能从 “父子通信”出发,逐级网上冒泡或逐级往下绑定 props的值,特别麻烦 。

那么,有没有解决的办法呢?当然有,使用 Vuex

面试官问 :Vuex 有什么作用?

答:主要为了解决 爷孙通信的麻烦(简答)。

相关文章

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

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

  • vue组件之间通信

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

  • Vue相关知识点

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

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

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

  • Vue如何实现组件通信?

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

  • Vue组件通信

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

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

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

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

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

  • Vue组件通信

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

  • Vue组件通信方式

    本文主要介绍关于Vue组件通信的四种方式,分别是父向子组件通信、子向父组件通信、非父子组件的EventBus通信、...

网友评论

      本文标题:Vue的组件通信

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