当前位置:网站首页 > 数据科学与大数据 > 正文

vue中组合式 API-依赖注入之provide和inject的用法(一)——功能-把一个祖先组件指定的数据和方法,传递给其所有子孙后代 & provide-提供或发送数据, inject-接收数据

vue中组合式 API-依赖注入之provide和inject的用法(一)——功能-把一个祖先组件指定的数据和方法,传递给其所有子孙后代 & provide-提供或发送数据, inject-接收数据

1、前言

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

像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套多深,父组件都可以为所有子组件或孙组件提供数据,父组件使用 provide 提供数据,子组件或孙组件 inject 注入数据。

provide与inject的功能

通过provide与inject,可以把一个祖先组件指定的数据和方法,传递给其所有子孙后代

provide 和 inject 主要在开发高阶插件/组件库时使用

2、vue2 中provide / inject的使用

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

provide:{ 
    info:“值” } 

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

provide(){ 
    return{ 
    info: this.msg } } 
在 vue2 中 project / inject 应用
//父组件 export default{ 
    provide:{ 
    info:"提供数据" } } //子组件 export default{ 
    inject:['info'], mounted(){ 
    console.log("接收数据:", this.info) // 接收数据:提供数据 } } 
  • provide 提供或发送数据, inject 接收数据。
3、vue3中的provide / inject的使用

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

provide( name,value ),provide 函数接收两个参数:

  • name:定义提供 property 的 name 。
  • value :property 的值。

使用时:

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

inject(name,default),inject 函数有两个参数:

  • name:接收 provide 提供的属性名。
  • default:设置默认值,可以不写,是可选参数。

使用时:

import { 
    inject } from "vue" export default { 
    setup(){ 
    inject('info',"设置默认值") } } 
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> 
4、使用示例

3个组件 A(父级)、B(子级)、C(孙子级)

父组件A ---- 通过provide指定传递给子孙组件的值

export default { 
    provide() { 
    // provide是一个匿名函数,返回一个对象 return { 
    reload: this.reload, msg:this.msg }; }, data(){ 
    return { 
    msg:'hello world!' } }, methods: { 
    reload() { 
    console.log("C调用A的方法!"); }, }, }, 

子/孙组件 ---- 通过inject 获取祖先组件传递过来的值

export default { 
    //inject: ["reload","msg"], 简写 inject:{ 
    // 详细指定来源以及默认值 msg:{ 
    from:'A', //表示从组件A传递过来的 default:'a default msg' }, reload:{ 
    from:'A' } }, mounted() { 
    this.reload(); }, }, 
到此这篇vue中组合式 API-依赖注入之provide和inject的用法(一)——功能-把一个祖先组件指定的数据和方法,传递给其所有子孙后代 & provide-提供或发送数据, inject-接收数据的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue中组合式 API-依赖注入之provide和inject的用法(二)——添加响应性 & 污染全局数据、破坏了单向数据流,vuex可追踪数据 & 三种通信方式之父子通信、兄弟通信、跨级通信2024-12-03 11:54:07
  • vue中组合式 API-依赖注入之provide和inject的用法(三)——实例之引用全局静态数据2024-12-03 11:54:07
  • axios请求本地json文件——调用路径只支持相对路径形式 & 设置、获取、清除sessionStorage & 跨组件通信之父组件有provide选项提供数据,子组件有inject选项来使用数据2024-12-03 11:54:07
  • vue中,el-table树形数据与懒加载——stripe斑马线 & row-key唯一标识id & lazy属性与加载函数load & default-expand-all之默认展开所有行2024-12-03 11:54:07
  • vue中,el-table树形数据与懒加载【实例】(一)——重置resetFields& lazy属性、hasChildren子项& el-select封装下拉组件& 获取当前登录人-reduce用法2024-12-03 11:54:07
  • vue3中,引入data数据方式 & 引入组件的2种方式2024-12-03 11:54:07
  • 网络爬虫开发(一)-爬虫基础——基本介绍-爬虫是请求网站并提取数据的自动化程序、爬虫的基本工作流程 & 实例之发送http请求-爬取网址的网页信息2024-12-03 11:54:07
  • Baas接口标准(四)-留言板案例——实现服务端之数据查询、数据变更 & vue-apollovue实现客户端之整合apollo调用接口基本步骤、查询数据并模板填充、添加留言信息、格式化时间2024-12-03 11:54:07
  • vue3封装表单组件(二)02之el-tree-select组件的使用——懒加载、数据回显 & el-tree和el-select的结合体2024-12-03 11:54:07
  • axios配置多个接口请求(二)——vue项目axios配置多个IP地址,并进行请求数据2024-12-03 11:54:07
  • 全屏图片