位置: IT常识 - 正文

vue中的provide/inject你知道吗(vue2、vue3)?(vue中的路由参数如何获取)

编辑:rootadmin
vue中的provide/inject你知道吗(vue2、vue3)?

推荐整理分享vue中的provide/inject你知道吗(vue2、vue3)?(vue中的路由参数如何获取),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue中的props是什么意思,vue中的路由是什么意思,vue中的生命周期钩子函数,vue中的provide inject,vue中的路由参数如何获取,vue中的provide/inject,vue中的provide,vue中的provide/inject,内容如对您有帮助,希望把文章链接给更多的朋友!

昨天看一个项目代码看到了provide,但是学习的时候也没看到,看了官网才知道vue还有这个API。多数情况下,provide会和inject一起使用,又叫“依赖注入”。

“依赖注入”主要是解决父子组件传值“props逐级传递”问题。所以,provide/inject的作用就是组件间的传值。

vue2基本用法:1.provide

provide 是一个对象或是返回一个对象的函数。

写在祖先组件中,用于提供给子组件可以注入的值。组件的关系为a-b-c-d

 在a组件中将参数num进行传递

export default { components: { BCom }, data() { return { num: 2, }; }, provide() { return { num: this.num, }; },};2.inject

inject为:一个数组,数组元素为注入的变量

                一个对象,key为注入的变量,value为一个包含form和default的对象

num: { from: 'num', default: '20'}

  在d组件中接收注入的变量

写法一:

export default { inject: ["num"],};

写法二:

export default { inject: { num: { form: "num", default: 20, }, },};vue中的provide/inject你知道吗(vue2、vue3)?(vue中的路由参数如何获取)

 可以看到d中显示的为inject注入的num变量。如果在a中不进行provide,则会显示默认值。

num 不是响应式的

 

 点击+100按钮,a组件显示的值改变,d组件显示的值没有改变。

如何成为响应式?1.方法一:函数方法

a组件:

<template> <div style="width: 600px; height: 600px; background-color: darkgreen"> 我是组件a <h4>{{ num }}</h4> <button @click="add">+100</button> <BCom></BCom> </div></template><script>import BCom from "./b-com.vue";export default { components: { BCom }, data() { return { num: 2, }; }, provide() { return { num: () => this.num, }; }, methods: { add() { this.num = this.num + 100; }, },};</script><style></style>

b组件 

<template> <div style=" width: 300px; height: 300px; background-color: bisque; " > 我是组件d <h4>{{ this.num() }}</h4> </div></template> <script>export default { inject: { num: { form: "num", default: () => {}, }, },};</script> <style></style>2.方法二:传递this

a组件

<template> <div style="width: 600px; height: 600px; background-color: darkgreen"> 我是组件a <h4>{{ num }}</h4> <button @click="add">+100</button> <BCom></BCom> </div></template><script>import BCom from "./b-com.vue";export default { components: { BCom }, data() { return { num: 2, }; }, provide() { return { AThis: this, }; }, methods: { add() { this.num = this.num + 100; }, },};</script><style></style>

d组件

<template> <div style=" width: 300px; height: 300px; background-color: bisque; " > 我是组件d <h4>{{ this.AThis.num }}</h4> </div></template> <script>export default { inject: { AThis: { form: "AThis", default() { return {}; }, }, },};</script> <style></style>vue3的基本用法:

provide() 接受两个参数:第一个参数是要注入的 key,可以是一个字符串或者一个 symbol,第二个参数是要注入的值。

<script setup>import { ref, provide } from 'vue'// 提供静态值provide('num')// 提供响应式的值const count = ref(0)provide('count', count)</script>

inject:

        第一个参数是注入的 key。

        Vue 会遍历父组件链,通过匹配 key 来确定所提供的值。如果父组件链上多个组件对同一个 key 提供了值,那么离得更近的组件将会“覆盖”链上更远的组件所提供的值。如果没有能通过 key 匹配到值,inject() 将返回 undefined,除非提供了一个默认值。

        第二个参数是可选的,即在没有匹配到 key 时使用的默认值。它也可以是一个工厂函数,用来返回某些创建起来比较复杂的值。如果默认值本身就是一个函数,那么你必须将 false 作为第三个参数传入,表明这个函数就是默认值,而不是一个工厂函数。

<script setup>import { inject } from 'vue'// 注入值的默认方式const num= inject('num')// 注入响应式的值const count = inject('count')// 注入一个值,若为空则使用提供的默认值const bar = inject('foo', 'default value')// 注入一个值,若为空则使用提供的工厂函数const baz = inject('foo', () => new Map())// 注入时为了表明提供的默认值是个函数,需要传入第三个参数const fn = inject('function', () => {}, false)</script>注:在d组件中,如果data中存在变量num,inject又注入了变量num,在页面中会显示data中num的值。

参考:组合选项 | Vue.js

本文链接地址:https://www.jiuchutong.com/zhishi/299860.html 转载请保留说明!

上一篇:opencv 六 缺陷检测实战2(PCB缺陷检测——小面积缺陷)(opencv焊点缺陷检测)

下一篇:大语言模型集成工具 LangChain(大语言模型集成工具)

  • 怎么算一般纳税人
  • 企业银行贷款报表要求
  • 小企业汇算清缴所得税会计分录
  • 申报后发现未勾选发票
  • 食堂支付的现金怎么入账
  • 一般纳税人减免增值税政策
  • 在建工程过程中取得收入怎么入账
  • 影院分成为什么那么高
  • 企业支付小额劳务费税率
  • 企业给员工发放最低生活保障
  • 预估入账的收入是什么
  • 视频制作费属于劳务费吗
  • 一般纳税人企业所得税政策最新2023税率
  • 营改增后消费型增值税怎么算及举例说明
  • 技术研发费加计扣除政策
  • 餐饮行业采购流程图
  • 公司账上收到退回的多交的附加税怎么做
  • 科目余额表借方和贷方
  • 收据和发票有什么区别图片
  • 存货跌价准备会计科目编码
  • 对方公司税务注销了发票没有开给我怎么办
  • 非流动负债怎么巧记
  • windows10显示文件格式
  • 发放股票股利会增加流通在外股票的数量
  • 房屋租赁合同变更
  • u盘bios设置usb启动
  • 房地产企业出售土地交什么税
  • 最大的数码相机是多少寸
  • win10不关机设置方法
  • 吸收合并会计处理举例
  • thinkphp yii
  • 基西米河生态退化原因
  • 企业清算的会计科目
  • 金税三期登录不上
  • vue路由实例
  • php曲线图模板
  • 城镇土地使用税减免税政策2023年
  • 广告宣传制作
  • 建筑业的账务处理方法
  • 网上免费学电脑
  • 高新企业奖励怎么领取
  • 游戏公司不开票怎么缴税
  • 纳税信用等级区别在哪
  • 房屋租赁交的定金可以退吗
  • mysql 锁详解
  • 长期股权投资稀释股权的两种
  • 劳务费个税账务处理办法
  • 发生的计提费用没有发生怎么办
  • 公司注销应收账款如何转让给第三方
  • 收到的业务赔偿如何入账
  • 一般纳税人开劳务费的税率是多少
  • 去年支付的费用,今年收到发票可以入账吗
  • 银行存款日记账模板
  • 赠送的产品怎么算成本
  • 企业清算主要清算哪些项目?
  • 账簿的设置和登记要点
  • windows的使用
  • win7系统修改
  • SmartExplorer.exe - SmartExplorer进程是什么意思
  • win7小喇叭有个红叉
  • win8系统怎么激活
  • wmiex.exe是什么程序
  • win7开机提示音在哪里关闭
  • linux常用网络工具
  • win7系统电脑卡住了怎么办
  • win8自带软件哪些可以卸载
  • 红石cpu教程
  • python怎么运作
  • android自定义属性详解
  • css table-cell
  • android基础知识大全
  • 基于web的旅游网站毕业设计
  • php守护进程的应用场景
  • 留抵税额可以留抵多久
  • 四川税务网络领发票流程
  • 江西省税务局12366
  • 河北省十大杰出五四青年
  • 汽车销售顾问有前途吗
  • 供电企业向电厂收取的并网服务费
  • 新车交购置税的流程图
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设