IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue组件间的通信【子传父,父传子,同级传递,爷孙传递】 -> 正文阅读

[JavaScript知识库]Vue组件间的通信【子传父,父传子,同级传递,爷孙传递】

Vue组件间的通信

引出问题

vue一个重要的思想就是组件化开发,说到组件化开发,提高结构样式行为的复用性,组件写好了,但组件间之间数据如何传递,就成了一个问题…

vue 组件之间是可以相互嵌套的,就像一个盒子,里面放了两个小盒子,这样就可以形成父子三个,兄弟两个的情况

那么我用一个自己写的小 demo 来说一下数据如何通信,在这里我设置一个场景,父亲和儿子以及未来儿媳妇的故事~

故事开始

有一位父亲,有一个儿子,儿子有一个对象,在这里说明等级,父亲就是父级别组件,儿子和对象是同级别组件。 故事进行中… 父亲给了儿子一套房子,儿子给对象说这以后就是咱们到家了。对象对父亲表达感谢。

故事分析

  • 父亲给儿子一套房子: 父传子 (用到技术:属性绑定
  • 儿子给对象说咱们有房子了:同级别组件之间传递数据 (用到技术:$bus 全局事件总线 )
  • 对象给父亲表达感谢: 子传父 (用到技术: 自定义事件)

代码实现

父亲组件代码如下:

<template>
  <div>
    <p>我是{{name}}</p>
    <p>这是儿子对我说的话:{{formSon}}</p>
    <p>这是儿媳妇对我说的话:{{formDou}}</p>
    <Brother :house="house" @thanks="thanks"></Brother>
    <Brother2 @thank="thank"></Brother2>

  </div>
</template>

<script>
import Brother from './brother1.vue'
import Brother2 from './brother2.vue'
export default {
  name: 'TodoTestFather',

  data() {
    return {
      name:'father',
      house:'这是给儿子的婚房',
      formSon:'',
      formDou:''
    };
  },
  components:{
    Brother,
    Brother2
  },
  methods:{
    thanks(message){
      this.formSon=  message
    },
    thank(message){
      this.formDou  = message
    }
  }
};
</script>

<style scoped>
  p{
    background-color: rgb(255, 71, 71);
  }
</style>

儿子组件

<template>
  <div>
    <p>我是老公:{{name}}</p>
    <p>我今年:{{age}}岁了</p>
    <p>我收到了父亲的数据:{{house}}</p>
    <p> <button @click="thankFather">感谢父亲赠与的家</button></p>
    <p>老婆对我说:{{fromWife}}</p>
    <p><button @click="tellWife">告诉老婆咱们有房子啦</button></p>
  </div>
</template>

<script>
export default {
  name: 'TodoTestBrother1',
  props:['house'],
  data() {
    return {
      name:'王雷旺',
      age:'22',
      fromWife:''
    };
  },

  mounted() {
    this.$bus.$on('fromWife', (data)=>{
      this.fromWife = data
    })
  },

  methods: {
    thankFather(){
      this.$emit('thanks', '谢谢老爸的房子');
    },
    tellWife(){
      this.$bus.$emit('formHusband','老爸给咱们了一套房子老婆')
    }
  },
  
};
</script>

<style  scoped>
  p{
    background-color: yellow;
  }
</style>

对象(儿媳妇组件)

<template>
  <div>
    <p>我是老婆:{{name}}</p>
    <p>我今年:{{age}}岁了</p>
    <p><button @click="thankFather">感谢父亲赠与的家</button></p>
    <p>我收到了老公的来信:{{formHunband}}</p>
    <p><button @click="thankHusband">感谢老公</button></p>
  </div>
</template>

<script>
export default {
  name: 'TodoTestBrother2',

  data() {
    return {
      name:'陈彦戈',
      age:21,
      formHunband:''
    };
  },
  mounted() {
    this.$bus.$on('formHusband', (data)=>{
      this.formHunband = data
    })
  },
  methods: {
    thankFather(){
      this.$emit('thank','谢谢爸爸,爸爸辛苦了,请喝茶')
    },
    thankHusband(){
      this.$bus.$emit('fromWife','谢谢老公我们有家啦!')
    }
  },
};
</script>

<style scoped>
  p{
    background-color: palevioletred;
  }
</style>

如何开启全局事件总线

另外说一下 想使用 $bus(全局事件总线实现兄弟或者爷孙之间的数据传递),那么就需要,开启全局事件总线,代码如下:

//创建vm
new Vue({
	el:'#app',
	render: h => h(App),
	beforeCreate(){
		Vue.prototype.$bus= this  //安装全局事件总线 
	}
})

执行效果

父传子:(下面是父亲给儿子说的话)
在这里插入图片描述子传父:
在这里插入图片描述
儿子和对象之间的数据传递
在这里插入图片描述
我们家伍佰(英短)8个月啦~

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:19:49  更:2022-11-05 00:20:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 15:31:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码