首页 > 其他分享 >provide 和 inject 用法及原理

provide 和 inject 用法及原理

时间:2022-09-26 16:26:21浏览次数:41  
标签:info provide 用法 default export inject 组件

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

像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套多深,父组件都可以为所有子组件或孙组件提供数据,父组件使用 provide 提供数据,子组件或孙组件 inject 注入数据。同时兄弟组件之间传值更方便。
一、Vue2 的 provide / inject 使用

provide :是一个对象,里面是属性和值。如:

provide:{  info:"值" }

如果 provide 需要使用 data 内的数据时,这样写就会报错。访问组件实例 property 时,需要将 provide 转换为返回对象的函数。

provide(){
 return{
  info: this.msg
 }
}

inject :是一个字符串数组。如:

inject: [ 'info' ]

接收上边 provide 提供的 info 数据,也可以是一个对象,该对象包含 from 和 default 属性,from 是可用做的注入内容中搜索用的 key,default 属性是指定默认值。

在 vue2 中 project / inject 应用:

//父组件
export default{
 provide:{
  info:"提供数据"
 }
}
//子组件
export default{
 inject:['info'],
 mounted(){
     console.log("接收数据:", this.info) // 接收数据:提供数据
 }
} 

provide / inject 类似于消息的订阅和发布。provide 提供或发送数据, inject 接收数据。

二、Vue3 的 provide / inject 使用

在组合式 API 中使用 provide/inject,两个只能在 setup 期间调用,使用之前,必须从 vue 显示导入 provide/inject 方法。

provide 函数接收两个参数:

provide( name,value )

name:定义提供 property 的 name 。

value :property 的值。

使用时:

import { provide } from "vue"
export default {
  setup(){
    provide('info',"值")
  }
} 

inject 函数有两个参数:

inject(name,default)

name:接收 provide 提供的属性名。

default:设置默认值,可以不写,是可选参数。

使用时:

import { inject } from "vue"
export default {
  setup(){
    inject('info',"设置默认值")
  }
}

完整实例1:provide/inject实例

//父组件代码
<script>
import { provide } from "vue"
export default {
setup(){
provide('info',"值")
  }
}
</script>

//子组件 代码
<template>
 {{info}}
</template>
<script>
import { inject } from "vue"
export default {
setup(){
const info = inject('info')
return{
info
    }
  }
}
</script>

 

标签:info,provide,用法,default,export,inject,组件
From: https://www.cnblogs.com/Ma-YuHao/p/16731309.html

相关文章

  • vue3中的provide和inject实现组件间通讯
    在vue2中我们已经使用过provide和inject来实现祖孙组件之间的数据传递,但是在vue3中由于我们使用setup,此时我们应该如何去使用provide和inject函数呢?在vue中帮我们提供了pr......
  • C# nameof的用法
     最重要的是nameof不会影响性能! nameof主要是解决类成员名做参数替代成员们的字符串做参数,如下:usingSystem;namespacecsharp6{internalclassProgram......
  • this关键字三种用法和super与this关键字图解
    this关键字三种用法super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种:1.在本类的成员方法中,访问本类的成员变量。2.在本类的成员方法中,访问本类的......
  • 继承中构造方法的访问特点和super关键字的三种用法
    继承中构造方法的访问特点1.子类构造方法当中有一个默认隐含的“super()"调用,所以一定是先调用的父类构造,后执行的子类构造。2.子类构造可以通过super关键字来调用父类重......
  • Vue 循环v-for列表用法
    v-for指令可以绑定数组的数据来渲染一个项目列表:<divid="app"><ol><liv-for="todointodos">{{todo.text}}</li></ol></div>varapp=newVue(......
  • Scanner进阶用法
    Scanner进阶用法判断是否为整数,浮点数packagecharpter2;​importjava.util.Scanner;​publicclassScanner3{  publicstaticvoidmain(String[]args){  ......
  • Scanner基础用法
    Scanner基础用法引入包java.util.Scanner读一个单词packagecharpter2;​importjava.util.Scanner;​publicclassScanner1{  publicstaticvoidmain(String[]......
  • vue3 基础-补充 ref & provide-inject
    本篇主要对一些被以前内容(渲染,传值)等忽略的几个常用小技巧进行补充说明啦.v-once即对某个dom节点生效,其会限定只会渲染一次,不论数据是如何的变化,演示如下:<!......
  • jQuery中attr()、prop()、data()用法及区别
    attr()此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property。prop()此方法jq1.6引入,读/写DOM的propert......
  • 学习笔记-Nmap基础用法
    Nmap安装包下载:https://nmap.org/download.htmlkali自带Nmap基本功能1.默认方式扫描:命令格式:nmap<扫描对象地址>只会扫描常用端口,不能做到全端口扫......