provide/inject 的用法

provide 可以在父组件以及祖先组件中可以定义方法,而在子组件或者任何后代组件中,我们都可以使用 inject 来接收 provide提供方法。

官网:

provide:Object | () => Object
inject:Array<string> | { [key: string]: string | Symbol | Object }
详细:

这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。如果你熟悉 React,这与 React 的上下文特性很相似。

provide 选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的 property。在该对象中你可以使用 ES2015 Symbols 作为 key,但是只在原生支持 Symbol 和 Reflect.ownKeys 的环境下可工作。

inject 选项应该是:

一个字符串数组,或
一个对象,对象的 key 是本地的绑定名,value 是:
在可用的注入内容中搜索用的 key (字符串或 Symbol),或
一个对象,该对象的:
from property 是在可用的注入内容中搜索用的 key (字符串或 Symbol)
default property 是降级情况下使用的 value
提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。
示列
// 父级组件提供 'foo'
var Provider = {
  provide: {
    foo: 'bar'
  },
  // ...
}

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

我自己在项目中的用法

在祖先组件中定义好数据,在后代组件中取,祖先数据如果改变,那就在后代组件中监听该方法

//祖先组件
<template>
  <div>
       祖先组件页面-----
   </div>
</template>
 
<script>
export default {
  data() {
    return {
     showIsFile: {
        ifFlag: false,
        num: 0,
      },
    };
  },
 provide() {
    return {
      showTopic: this.showIsFile,
    };
  },
  mounted() {
    getIsFile(val) {
      console.log("getIsFile",val);
      this.showIsFile.ifFlag = val;
      this.showIsFile.num++;
    },
  },
};
</script>

//后代组件
<template>
  <div>
       后代组件页面-----
   </div>
</template>
 
<script>
export default {
  data() {
    return {};
  },
 inject: ["showTopic"],
 watch: {
    showTopic: {
      handler(value) {
       conle.log(value)
      },
      immediate: true,
      deep: true,
    },
  },
};
</script>

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值