当前位置:首页 > 技术分析 > 正文内容

vue数据通信:孙子组件直接调用爷爷组件中定义的方法(一)

ruisui8814小时前技术分析1

vue中,孙子组件,向外祖父组件传递消息(多层组件之间传递数据):

// 爷爷组件grandpa.vue:
	引入父亲组件:import parent from './parent.vue'
  <parent :money="money" @useMoney="useMoney" />
  component: {parent},
  data () {
    return {
      money: 10000
    }
  },
  methods: {
    useMoney (num) {
      this.money -= num
    }
  }
  
// 父亲组件parent.vue:
  引入儿子组件:import son from './son.vue'
  <son :money="money" />
  component: {son},
  props: {money: Number},  

// 儿子组件son.vue:
  引入孙子组件:import grandson from './grandson.vue'
  <grandson :money="money" />
  props: {money: Number},
  
// 孙子组件grandson.vue:
  <button @click="useMoney">use money</button>
  props: {money: Number},
  component: {son},
  methods: {
    useMoney () {
      // this.$parent.$parent.$emit('useMoney', 100) // 常规写法1
      this.$eventDispatch('useMoney', 100) // 自定义一个dispatch方法2
    }
  }
	
 上述事例中,中间隔了2代:孙子->儿子->父亲->爷爷,
 孙子直接调用爷爷组件中定义的方法、事件。展示了一个嵌套了4层父子关系多层组件之间的数据,
 自定义事件的例子。孙子组件中useMoney方法,
 直接触发了爷爷组件中引入的父亲组件parent中自定义方事件:
 useMoney (num) {
   this.money -= num
 }

 写法1是常规的写法,但是写法很麻烦,也很混乱。若有很多很多层,
 需要不停的往上找父级.$parent的步骤;
 写法2是企业中封装的dispatch方法,其作用是简化写法,省去中间若干的.$parent。
 

下面是自定义$eventDispatch的封装步骤:
vue中mian.js文件:
import { eventExtent } from './extends'
eventExtent(Vue) // 传入的是大写Vue的构造函数

然后在与mian.js同级目录,新建目录extends,目录结构:
/extends
	-> event.js
	-> index.js


event.js文件:
export default function (Vue) {
  Vue.prototype.$eventDispatch = function (name, value) {
    // 封装dispatch方法:child -> parent
    let parent = this.$parent
    while (parent) {
      parent.$emit(name, value)
      parent = parent.$parent
    }
  }
}

index.js文件:
import eventExtent from "./event";
export {
  eventExtent
}

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3796.html

分享给朋友:

“vue数据通信:孙子组件直接调用爷爷组件中定义的方法(一)” 的相关文章

vue组件间的九种通信方式

前言Vue组件实例间的作用域是相互独立的,而通常一个页面是由很多个组件构成,这些组件可能又嵌套了组件,形成了一个关系网图,它们的关系可能是像下图中一样,大致分为两种使用场景,父子组件间通信和非父子组件间通信,父子组件间通信又分为直接父子关系和间接父子关系。vue提供了多种通信方法,针对不同的通信需求...

快速上手React

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能。对于刚开始学习使用框架的小伙伴们,可以推荐这个框架,学会之后简直能颠覆之前你对前端开发的认...

学无止境:Git 如何优雅地回退代码

来源:https://zhenbianshu.github.io前言从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 L...

用IDEA开发如何用Git快速拉取指定分支代码?

1,准备空的文件夹,git init2,关联远程仓库,git remote add origin gitlab地址3,拉取远程分支代码,git pull origin 远程分支名再用IDEA打开项目即可...

GitLab 14.6发布,优化Geo高可用,安全更新等

昨天,GitLab官方按照管理发布了有一个月度版本GitLab 14.6的发布,这也是本年度收官版本。14.6中在安全合规性方面,在Geo方面以及MD代码块一键复制等方便做了优化,另外还在UI图标方面发布了一套全新的图标。详细情况请和虫虫一起学习。GitLab 14.6主要改进使用 Geo 实现无缝...

K8s里我的容器到底用了多少内存?

作者:frostchen导语 Linux下开发者习惯在物理机或者虚拟机环境下使用top和free等命令查看机器和进程的内存使用量,近年来越来越多的应用服务完成了微服务容器化改造,过去查看、监控和定位内存使用量的方法似乎时常不太奏效。如果你的应用程序刚刚迁移到K8s中,经常被诸如以下问题所困扰:容器的...