vue如何将父页面的数据,传给孙以及更深的组件呢?

我们在vue前端开发的过程中,经常会将一个页面拆分成多个组件来组装,但是当页面复杂的时候,可能会出现组件嵌套组件再嵌套组件...

这时候刚好有一个参数,我们在父页面获取到了,在孙组件的孙组件的....需要引用....

emmm... 要用props一层一层的传递下去嘛,这样代码显得臃肿,说不定下一个人在优化的时候,就给删掉了怎么办....这是一个很严重的问题

我们先看一下props

html 复制代码
<!-- one.vue -->
<two :message="message" />
data(){ return { message: "我是父页面的消息!" } }
html 复制代码
<!-- two.vue -->
<three :message="message" />
props(){ message: String }
html 复制代码
<!-- three.vue -->
<four :message="message" />
props(){ message: String }
html 复制代码
<!-- four.vue -->
<div>{{ message }}</div>
props(){ message: String }

这参数传递,看了直呼好家伙,真怕哪一级传着传着就丢了,真的就是我不使用参数,我只是参数的搬运工,那有没有什么方法能简化参数的传递呢?接下来我们看一下官方提供的两个钩子。

provide inject

下面是官方提供的钩子provideinject,简化了深层传递参数的方案

html 复制代码
<template> <Child /> </template>
<script>
import Child from './Child.vue'
export default {
  components: { Child },
  provide() { return { message: 'hello' } }
}
</script>
html 复制代码
<template>
  <GrandChild />
</template>
<script>
import GrandChild from './GrandChild.vue'
export default {
  components: { GrandChild }
}
</script>
html 复制代码
<template>
  <p> {{ message }} </p>
</template>
<script>
export default {
  inject: ['message']
  // inject: {
  //     message: {
  //         from: 'message', // 当与原注入名同名时,这个属性是可选的
  //         default: 'default value' 
  //     }, 
  // }
}
</script>

写在最后

当然,也有其他的方法进行传递,比如Bus的方式,存储在一个公共的区域,再进行引用和读取,或者vuex里,都是可以的,具体还是看个人取舍了。

相关推荐
To_OC12 分钟前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕24 分钟前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
Fluxart.ai3 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
why技术3 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
愚公搬代码3 小时前
【愚公系列】《Android应用案例开发大全》016-LBS类应用掌上杭州(辅助工具类的开发)
android·前端
CodeSheep3 小时前
又一个华为天才少年,离职了!
前端·后端·程序员
kyriewen4 小时前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试
IT_陈寒5 小时前
Vue的双向绑定把我坑惨了,原来这个场景不能用
前端·人工智能·后端
hunterandroid5 小时前
[Android 从零到一] Compose LazyColumn 性能优化:key、稳定性与重组治理
android·前端
lichenyang4535 小时前
从一次团队邀请开始:用 React、NestJS 与 Socket.IO 做可靠的实时通知
前端