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

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

ruisui882个月前 (05-04)技术分析17

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数据通信:孙子组件直接调用爷爷组件中定义的方法(一)” 的相关文章

国产操作系统上Vim的详解03--安装和使用插件 | 统信 | 麒麟 | 中科方德

原文链接:国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插件管理器,可以帮助我们轻松地安...

JS数组过滤元素的方法

引言JavaScript 作为前端开发的核心技术之一,在现代 Web 开发中扮演着举足轻重的角色。随着 Web 应用越来越复杂,高效处理数据集合的需求日益凸显。本文旨在介绍 JavaScript 中数组过滤的基础知识及其在实际项目中的应用技巧。技术概述定义数组过滤是 JavaScript 提供的一种...

VUE3+JAVA商城源码小程序APP商城

三勾小程序商城基于springboot+element-ui+uniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。软件架构后端: springboot2.3.12管...

尤雨溪:Vue 2生命周期已正式结束,开发团队应迁移至最新版本

IT之家 1 月 2 日消息,Vue.js 作者尤雨溪发文声称,Vue 2 已于 2023 年 12 月 31 日结束生命周期(EOL),目前 Vue 2 已经无法接收到新功能及修复补丁,还在使用 Vue 2 的开发团队应迁移至最新的 Vue 3 版本。据悉,Vue 2.0 最初发布于 2016 年...

原生微信小程序打包成安卓/IOS应用!#小程序开发

原生微信小程序打包成公。好消息,微信小程序可以直接打包成APP了你们知道吗?微信团队近日开发了一个多端开发平台。多端据文档描述,多端开发框架是支持使用小程序原生语法开发移动端应用的框架。开发者可以一次编码分别编译为小程序安卓以及iOS应用,实现多端开发。我们进入多端框架开发的文档,来看看怎么使用微信...

电机中“同步”、“异步”的区别到底在哪?

想要了解同步和异步的区别和工作原理必须知道“同步”是啥?定子电流产生的旋转磁场绑在(把磁场想象成一个实物)转子这块磁铁或电磁铁,一起“嗨”起来,两者速度相同...“异步”是啥?定子电流产生的旋转磁场自带几把刷子,旋转的时候对着转子一顿狂刷,利用“摩擦摩擦”将转子带起来,两者速度不同,产生差异(转差率...