什么是依赖注入,vue的依赖注入如何实现的

详解Vue实战指南之依赖注入(provide/inject) 主要介绍了详解Vue实战指南之依赖注入(provide/inject),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深(这也是使用$parent不好实现的地方),并在起上下游关系成立的时间里始终生效。

不用再关心dom层级,只要在祖先组件内部就可以一直使用祖先组件提供的provide
provide 选项允许我们指定我们想要提供给后代组件的数据/方法。

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

祖先组件不需要知道哪些后代组件使用它提供的属性
后代组件不需要知道被注入的属性来自哪里

provide/inject 是解决组件之间的通信问题的利器,不受层级结构的限制,但并不是响应式的。
但也不是随便去滥用,通信代表着耦合:

demo
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue"></script>
</head>
<body>
<div id="dynamic-component-demo">
    <google-map style="border:1px solid pink;">
        <google-map-region v-bind:shape="cityBoundaries" style="border:1px solid red;width:80%;">
            <google-map-markers v-bind:places="iceCreamShops"  style="border:1px solid yellow;width:60%;"></google-map-markers>
        </google-map-region>
    </google-map>
</div>
<script>
    Vue.component('google-map', {
        template: `
      <div>
        <h1 @click="changeMsg">我是祖父,googel-map,{{msg}}</h1>
        <div>改变msg<input type=“text” v-model="msg" /></div>
        <slot></slot>
      </div>`,
        data(){
            return {
                msg:'你好,我是devincob'
            }
        },
        provide: function () {
            return {
                getMap: function(){
                    console.log('我来自祖父组件',this.msg)
                },
                msg:this.msg
            }
        },
        methods:{
            changeMsg(){
                this.msg = 'hello,i am devincob!'
            }
        }
    })
    Vue.component('google-map-region', {
        props:["shape"],
        inject: ['getMap','msg'],
        template: `
      <div>
        <h2 @click="getMap">我是父亲,gooel-map-region,{{msg}}</h2>
        <p>{{shape}}</p>
        <slot></slot>
      </div>
    `
    })
    Vue.component('google-map-markers', {
        props:["places"],
        inject: ['getMap','msg'],
        template: `<div>
      <h3 @click="getMap">我是儿子,gooel-map-makers,{{msg}}</h3>
      <p>{{places}}</p>
    </div>`
    })
    new Vue({
        el: '#dynamic-component-demo',
        data: {
            currentTab: 'Posts',
            tabs: ['Posts', 'Archive'],
            msg:'恭喜您中了我司一等奖,devincon!',
            cityBoundaries:'上海',
            iceCreamShops:'莲花超市'
        },
        computed: {
            currentTabComponent: function () {
                return 'tab-' + this.currentTab.toLowerCase()
            }
        }
    })
</script>
</body>
</html>
bcftools学习笔记(一) 欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索... 阅读详情

相关推荐

ENVI遥感技术

记录2024.03.06所遇到的遥感问题

qq_44453923的博客 4330

一文掌握Vue依赖注入:原理、应用场景以及最佳模块化与单元测试实践,提升代码的可维护性与模块化程度

本文将详述Vue依赖注入的核心原理、典型应用场景,并结合最佳模块化与单元测试实践,帮助开发者有效运用这一特性提升代码的可维护性与模块化程度。Vue 中的依赖注入(Dependency Injection, DI)机制通过 provide 与 inject API,实现了跨组件层级间的数据与服务透明传递,使父组件能够向其任意深度的子孙组件“注入”依赖,而不需要通过层层传递 `props` 或使用全局状态管理库(如 Vuex),极大地简化了复杂组件架构下的通信难题。

JINGWHALE 2920

SpringBoot+Vue实现图片上传

SpringBoot+Vue实现图片上传

叶♥璃 2730

请解释Vue.js中的依赖注入(dependency injection)是如何工作的?它有什么用处?

在Vue.js中,依赖注入是一种常见的设计模式,用于处理组件之间的依赖关系。依赖注入的核心思想是将一个对象的依赖关系或相关对象注入到另一个对象中,从而实现对象之间的松耦合。在Vue.js中,与传统的依赖注入方式不同,Vue.js中的依赖注入是通过provide和inject这一对选项来实现的。

有我更精彩的博客 570

在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记

日期:2025-09-09关键词:鲲鹏920、Atlas 300i Duo、银河麒麟V10、NPU、驱动、固件。

weixin_41544125的博客 2806

python调用hypermesh调用tcl_TclTk如何调用HyperMesh运行tcl脚本文件

#Tcl/Tk编写界面部分set t [toplevel .tp]focus $tgrab $tset Filename "E:/CAE_Tech/process_files/88/Example.tcl"set Font "Times 12 bold"wm title $t "Call HyperMesh"wm attribute $t -topmost 1wm withdraw $tset t...

weixin_39541681的博客 1598

Vue3核心源码解析第八课 依赖注入

Vue.js 为我们提供了很多组件通讯的方式,常见的是父子组件通过 prop 传递数据。但是有时,我们希望能跨父子组件通讯,比如,无论组件之间嵌套多少层级,我都希望在后代组件中能访问它们祖先组件的数据。Vue.js 2.x 给我们提供了一种依赖注入的解决方案,即在祖先组件提供一个 provide 选项,举个例子: 这就相当于在祖先组件提供 foo 这个变量数据,我们就可以在任意子孙组件中注入这个变量数据: 这样,我们就可以在子孙组件中通过 this.foo 访问祖先组件提供的数据,以达到组件通讯的目的。到了

fegus的博客 1357

PADS VX 蛇形走线的设置方法与绕制

在PCB设计过程中,在等长的设置中是必须用到蛇形走线的,并且DDR模块也会经常使用到。因此掌握蛇形走线的设置方法对我们PCB高速板设计中有很大的帮助。下面介绍蛇形走线的设置方法与绕制。1.单根网络线的蛇形走线的设置:打开PADS router界面,点击“工具”→“选项”(快捷方式“Ctrl+Enter”),弹出“选项”窗口,选择“布线”界面下的“调整”,在“调整”界面,设置蛇形走线,倒角比例可以灵活设置。操作如下图所示:完成蛇形走线的配置后,快捷方式“F3”进行交互式布线时,单击右键选择“添加蛇形走线”,便

tianpu2320959696的博客 3383

Vue-依赖注入(provide-inject)

也就是说,在父组件只要声明了provide,在其子组件,孙组件,曾孙组件等能形成上下游关系的组件中交互,无论多深都能通过inject来访问provider中的数据。在该对象中,它支持ES6中Symbol作为key,但只在原生支持等环境下可工作。注意:provide和inject绑定并不是可响应的,这是刻意为之,然而如果你传入了一个可监听的对象,那么气对象的属性还是可监听的。这对选项允许一个祖先组件向其所有子孙后代组件注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

qq_56973906的博客 3830

62. 如何通过增强(Enhancement) 的方式给 SAP ABAP 标准程序增添新功能

本文通过一个实际的例子,介绍了如何不通过修改 SAP 标准 ABAP 程序源代码的方式,对其的功能进行增强,即采取 ABAP 增强开发的方式进行二次开发,这是一种在实际 SAP 项目实施过程中使用非常广泛的技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3303

MobaXterm简介和使用(服务器连接工具)

MobaXterm 是一个功能强大的远程计算工具,集成了许多常用的远程计算功能,包括 SSH、X11、RDP、VNC、FTP、SFTP 等。

清平乐的技术专栏 1936

Vue的依赖注入

Vue的依赖注入 依赖注入官方文档 当一个module拥有超过两层的组件时,从后代组件一层层emit出去调用祖先组件的方法或一层层将祖先的数据用props传递到后代组件实在是太麻烦,当需要修改时也需要一层层去找需要修改的地方 vue.js提供了一个“依赖注入”的方式,在这个方式中用到了两个新的实例选项:provide和inject provide选项允许我们指定我们想要提供给后代组件的数据/方法。 祖先组件: ... data() { return { msg: ‘I am origin compon

weixin_39932706的博客 6533

【RH850/U2A】:HSM与APP通信(中断方式)

HSM与APP通信(中断方式)

1992

LAMMPS fix surface/global 详解:为颗粒模拟搭建全局颗粒表面(GRANSURF 包)

本文以 LAMMPS 官方文档 [fix_surface_global.rst](https://link.gitcode.com/i/57813f9fd125d567c4afd8a8cf51ef3e) 为主体,完整讲解 `fix surface/global` 命令的语法、`input`/`model` 关键字与可选参数的全部含义,并结合 [src/GRANSURF/fix_surface_gl

gitblog_00456的博客 1043

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Vue 3 中如何使用 provide 和 inject 实现依赖注入?

在 Vue 3 中,provide和inject是一对用于实现依赖注入的 API。它们提供了一种方式,让祖先组件能够向其所有子孙后代组件注入依赖,而无需通过props逐层传递。这在开发大型复杂应用时,尤其是当组件层级较深时,可以极大地简化代码和提高可维护性。

chengede98的博客 1141

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vue依赖注入 实现祖父组件data数据改变,子孙组件自动跟着改变

vue依赖注入 实现祖父组件data数据改变,子孙组件自动跟着改变

qq_45030898的博客 341

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

vue3-依赖注入

实现一个简单的依赖注入 父级 <template> <div> <hr> <p>父</p> <p>{{num}}</p> <button @click="addFn(1)">+1</button> <Son></Son> </div> </template> <script> import

【03】的博客 1865

【vue2.x】响应式依赖注入

响应式依赖注入 在vue框架的设计中,依赖注入并不是响应式的。即使是有很多人包括我自己也希望它是。 可以使用data()方法或者Vue.observable创建一个响应式对象,这样在使用依赖注入的时候也是响应式的。 1. 使用 data() 方法创建一个依赖注入的响应式对象 export default { provide() { return { reactive: this.reactive }; }, data() { return { react

z767327552的专栏 1442

vue依赖注入provide - inject实现子组件调用父组件的方法

父组件提供provide,允许我们指定我们想要提供给后代组件的数据/方法 provide: function () { return { getMap: this.getMap } } 子组件使用 inject 选项来接收指定的我们想要添加在这个实例上的属性: inject: ['getMap'] 缺陷 然而,依赖注入还是有负面影响的。它...

weixin_30564901的博客 669

vueJs 源码解析 (三) 具体代码

vueJs 源码解析 (三) 具体代码 在之前的文章中提到了 vuejs 源码中的 架构部分,以及 谈论到了 vue 源码三要素 vm、compiler、watcher 这三要素,那么今天我们就从这三要素逐步了解清楚 好了,话不多说, let's do it 在这之前,我们需要 对上文中讲到的 vuejs 的源码是 flow 写法的问题进行一个简化。 毕竟还有有工具是可以解决的。 ...

ankuailan3925的博客 186

Vue3 中使用组合式API和依赖注入实现自定义公共方法

Vue3 中使用组合式API和依赖注入实现自定义公共方法

微光无限的博客 382

vue3实现跨层级组件通信 依赖注入

后代组件通过 inject 收 import {inject} from vue。祖先级组件 import{providi} from vue。

articlesection的博客 180

vue3使用依赖注入实现跨组件传值

vue3使用依赖注入实现跨组件传值

徐同保的专栏 296

【Vue】生命周期,组件,插槽,依赖注入,实现分页器组件,异步组件,keep-alive

什么是Vue的options?就是new Vue({})时传入的这个对象,用来配置该vue实例的各个方面,常见字段有data,methods,computed等,声明组件的时候也用到的是同样的options对象:Vue.component(‘foo-bar’,{}),export default{}vue能够检测数据变化的原理?vue2中是将数据及computed等字段都变成了getter和setter,业务代码修改数据相当于调用setter,setter里就会安排更新。

李小浦的博客 711

Vue项目依赖注入的使用

官方解释:在这个组件里,所有 组件google-map 的后代都需要访问一个 getMap 方法,以便知道要跟哪个地图进行交互。不幸的是,使用 $parent property 无法很好的扩展到更深层级的嵌套组件上。这也是依赖注入的用武之地,它用到了两个新的实例选项:provide 和 inject。provide 选项允许我们指定我们想要提供给后代组件的数据/方法。return {然后在任何后代组件里,我们都可以使用 inject 选项来接收指定的我们想要添加在这个实例上的 property。

常常不爱学习 635

vue3使用依赖注入实现跨组件传值(高级版)

vue3使用依赖注入实现跨组件传值(高级版)

徐同保的专栏 481
上一篇: vue2开发中实例事件总结($on,$once,$off,$emit,$root,$refs,$parent 的使用)
下一篇: BOM 常用API
devincob
博客等级 码龄10年 72粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值