Vue privide 和inject 依赖注入的使用详解

 更新时间:2022年10月31日 15:59:00   作者:技术杨  
这篇文章主要介绍了Vue privide 和inject 依赖注入的用法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言

关于Vue组件的通讯方式如下:

  • 父子组件:通过prop,$ emit,【$ root,$ parent,$ children】;
  • 非父子组件:vuex,父子层层传递、中央事务总线bus,$ref。

vue官网建议,在正常情况下,上述方式已经能满足绝大多数甚至所有的业务需求,对于应用程序代码应优先使用它们处理。然而,还有一种主要为 高阶插件/组件库 提供的用例办法,即 provide / inject (这对选项需要一起使用)。

from表示在可用的注入内容中搜索用的 key,default当然就是默认值。

示例

// 父级组件提供'foo'
var Provider = {
  provide:{
    foo:'bar'
   },
   //...
  }
 子组件注入'foo'
 var Child = {
   inject:['foo'],
   created(){
    console.log(this.foo) // =>"bar"
   }
   //...
  }

项目案例

父组件

项目最外层的布局组件layout.vue

<template>
   <div>
   <!--主内容-->
   <router-view></router-view>
   </div>
 </template>
 <script>
    export default{
       name:'layout',
       provide(){
          return{
               layout:this//这里的this值当前layout组件实例
	       box:'world'
	     }
	  },
	  data(){
	     return{
	        test:'hello'
	   }
	 },
}
</script>

这里就是我们说的provide,向下提供信息,这里提供的是当前的vue实例,相当于给了后代一个接口。

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

子组件

layout.vue 组件内的router-view 可能路由进来很多其它子孙组件,比如order.vue

<script>
    export default {
     name:'order',
     inject:['layout','box'],
     created(){
     console.log(this.layout.test);//hello
     console.log(this.box);//world
     }
    }

这样也就可以访问了,当做当前vue实例的属性。这样做的好处,相当于给了一个捷径,不用使用$parent一级一级的访问。

我们可以把依赖注入看做一部分“大范围有效的prop”,除了

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

到此这篇关于Vue privide 和inject 依赖注入的用法的文章就介绍到这了,更多相关Vue privide 和inject内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue2.0多条件搜索组件使用详解

    vue2.0多条件搜索组件使用详解

    这篇文章主要为大家详细介绍了vue2.0多条件搜索组件的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • vue实现列表无缝循环滚动

    vue实现列表无缝循环滚动

    这篇文章主要为大家详细介绍了vue实现列表无缝循环滚动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 快速解决vue-cli在ie9+中无效的问题

    快速解决vue-cli在ie9+中无效的问题

    今天小编就为大家分享一篇快速解决vue-cli在ie9+中无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue使用html2canvas实现将DOM节点生成对应的PDF

    vue使用html2canvas实现将DOM节点生成对应的PDF

    这篇文章主要为大家详细介绍了vue如何使用html2canvas实现将DOM节点生成对应的PDF,文中的示例代码简洁易懂,感兴趣的小伙伴可以学习一下
    2023-08-08
  • vue组件 非单文件组件的使用步骤

    vue组件 非单文件组件的使用步骤

    组件又分为非单文件组件和单文件组件,一般常用的就是单文件组件,这篇文章主要介绍了vue组件非单文件组件的使用步骤,需要的朋友可以参考下
    2023-01-01
  • vue判断内容是否滑动到底部的三种方式

    vue判断内容是否滑动到底部的三种方式

    这篇文章主要介绍了vue判断内容是否滑动到底部的三种方式,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04
  • vue中pc移动滚动穿透问题及解决

    vue中pc移动滚动穿透问题及解决

    这篇文章主要介绍了vue中pc移动滚动穿透问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • antdv vue upload自定义上传结合表单提交方式

    antdv vue upload自定义上传结合表单提交方式

    这篇文章主要介绍了antdv vue upload自定义上传结合表单提交方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • VuePress 中如何增加用户登录功能

    VuePress 中如何增加用户登录功能

    VuePress 由两部分组成:一个以 Vue 驱动的主题系统的简约静态网站生成工具,和一个为编写技术文档而优化的默认主题。它是为了支持 Vue 子项目的文档需求而创建的
    2019-11-11
  • 浅谈el-table中使用虚拟列表对对表格进行优化

    浅谈el-table中使用虚拟列表对对表格进行优化

    我们会经常使用表格,如果数据量大就直接可以分页,如果多条可能会影响表格的卡顿,那么应该如何进行优化,感兴趣的可以了解一下
    2021-08-08

最新评论