依赖注入还是有负面影响的。它将你的应用以目前的组件组织方式耦合了起来,使重构变得更加困难。同时所提供的属性是非响应式的。这是出于设计的考虑,因为使用它们来创建一个中心化规模化的数据跟使用$root做这件事都是不够好的。如果你想要共享的这个属性是你的应用特有的,而不是通用化的,或者如果你想在祖先组件中更新所提供的数据,那么这意味着你可能需要换用一个像Vuex这样真正的状态管理方案了。

话不多说,上代码解释:

在这个组件里,所有的后代都需要访问根组件的一个getchildrenNode方法,以便知道要跟那个子级进行交互。不幸的是,使用$parent属性无法很好的扩展到更深层级的嵌套组件上。此时用到了两个新的实例选项:provide和inject。

provide选项允许我们指定我们想要提供给后代组件的数据/方法。在这个例子中,就是内部的getchildrenNode方法:

父组件:

provide: function () {

return {

getchildrenNode: this.getchildrenNode

}

}

然后在任何后代组件里,我们都可以使用inject选项来接收指定的我们想要添加在这个实例上的属性:

子组件:

inject: ['getchildrenNode']

相比$parent来说,这个用法可以让我们在任意后代组件中访问getchildrenNode,而不需要暴露整个实例。这允许我们更好的持续研发该组件,而不需要担心我们可能会改变/移除一些子组件依赖的东西。同时这些组件之间的接口是始终明确定义的,就和props一样。

实际上,你可以把依赖注入看作一部分“大范围有效的 prop”,除了:祖先组件不需要知道哪些后代组件使用它提供的属性

后代组件不需要知道被注入的属性来自哪里

inject 响应式_vue 的 provide 和 inject 依赖注入与 $parent相关推荐

  1. inject 响应式_Vue 3 组合式 provide/inject

    组合式提供与注入 在之前的章节,我们讲了选项式的 提供与注入,今天我们继续讲组合式提供与注入. 我们也可以在组合式 API 中使用 provide/inject.两者都只能在当前活动实例的 setup ...

  2. vue 中provide的用法_vue中provide和inject的用法

    2.2.0 新增 描述: provide 和 inject 主要为高阶插件/组件库提供用例.并不推荐直接用于应用程序代码中; 并且这对选项需要一起使用; 以允许一个祖先组件向其所有子孙后代注入一个依赖 ...

  3. vue 中provide的用法_vue中provide和inject使用

    1.provide/inject有什么用? 常用的父子组件通信方式都是父组件绑定要传递给子组件的数据,子组件通过props属性接收,一旦组件层级变多时,采用这种方式一级一级传递值非常麻烦,而且代码可读 ...

  4. VUE2中provide 和 inject用法,以及怎么做响应式数据?

    1. provide/inject说明 provide 和 inject, 用来实现实现跨组件之间通信. 父子/孙子组件之间任意通信. 在祖先组件中通过provide注入一个依赖,不论组件层次有多深, ...

  5. vue3中 provide 和 inject 用法

    前言: 在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时, ...

  6. vue 3 学习笔记 (八)——provide 和 inject 用法及原理

    在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传 ...

  7. provide和inject 用法

    这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的斜体样式时间里始终生效. 使用场景:由于vue有$parent属性可以让子组件访问父组件 ...

  8. 关于组件之间使用provide和inject传值

    1.在写项目的时候,由于组件封装的层次超过了两层,因而想起了用provide和inject传值的方式.provide和inject都是与data.methods.钩子函数同级,千万不要写错!! 基础用 ...

  9. 【Vue.js源码解析 一】-- 响应式原理

    前言 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:建议通过左侧导航栏进行阅读 课程目标 Vue.js 的静态成员和实例成员初始化过程 首次渲染的过程 数据响应式原理 – 最核心的特性之一 准备工作 ...

最新文章

  1. OpenCV 【三】————contours便利删除操作方法
  2. 清华校友总会AI大数据专委会(筹)第一次理事会顺利召开
  3. 大赛归来的你们,仍是那个少年--少了游移、多了自信,少了软弱、多了坚强...
  4. TCL with SNPS file existsfile rename/copy redirect lsearch split
  5. Web API-如何将Controller的返回值转换成HTTP response消息
  6. ImportError: cannot import name ‘AliPay‘ from ‘alipay‘
  7. mysql登录之后可以写什么_MYSQL登陆完之后如何操作???(新手求助)
  8. android ndk 混淆,OLLVM + NDK 混淆编译环境搭建
  9. ios UISegmentedControl的使用简介
  10. 阿里云软件著作权怎么登记申请?(注册步骤详细教程)
  11. IAR8.3 STM8安装过程
  12. CMR(IF=50.129)重磅综述|肠-脑轴新疗法:肠道菌群如何影响人类神经系统疾病
  13. 【计算机组成原理】寄存器的本质——锁存器
  14. 活动桌面处理和一个例子
  15. linux中查看ruby版本号,Ruby 版本常量
  16. 黎曼流形(Riemannian manifold)
  17. Nature:每两个月注射一次卡波替格拉韦可以让大多数人免受艾滋病毒
  18. JQuery返回前一页
  19. dout java,java-附加到ObjectOutputStream
  20. 总计超5万星!GitHub上10个超级好玩的项目

热门文章

  1. py 的 第 20 天
  2. Docker----在Docker中部署Asp.net core2.1以及修改发布
  3. HttpClient(4.5.x)正确的使用姿势
  4. 如何给Apache添加虚拟路径和虚拟主机?
  5. C++高精度运算类bign (重载操作符)
  6. c++ 全局变量初始化的一点总结
  7. java 加密算法 base64
  8. Web UI设计的关键要素!
  9. android java包_android SDk中常用的java包介绍
  10. python正确的赋值语句-Python 赋值语句技巧之序列解包