位置: 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(大语言模型集成工具)

  • vivos10支持无线充电吗(vivos10支持无线快充吗)

    vivos10支持无线充电吗(vivos10支持无线快充吗)

  • iphone13来电闪光灯怎么设置(iphone13来电闪光灯)

    iphone13来电闪光灯怎么设置(iphone13来电闪光灯)

  • 红米k30pro出厂自带膜吗(红米k30pro出厂设置在哪)

    红米k30pro出厂自带膜吗(红米k30pro出厂设置在哪)

  • vivo x27手机电量百分比在哪设置(vivox21手机电量)

    vivo x27手机电量百分比在哪设置(vivox21手机电量)

  • wps连接啥意思(wps连接是)

    wps连接啥意思(wps连接是)

  • iommu开启还是关闭(ioh是开还是关)

    iommu开启还是关闭(ioh是开还是关)

  • 美团商户通是什么意思

    美团商户通是什么意思

  • 快手beta版已过期什么意思(快手beta版已过期还删不掉)

    快手beta版已过期什么意思(快手beta版已过期还删不掉)

  • 3500x上多少频率内存(3500x支持3600频率吗)

    3500x上多少频率内存(3500x支持3600频率吗)

  • 小米8note pro是什么处理器(小米8note pro参数)

    小米8note pro是什么处理器(小米8note pro参数)

  • 淘宝买家五颗心代表什么(淘宝买家五心是多少分)

    淘宝买家五颗心代表什么(淘宝买家五心是多少分)

  • 12123为什么登不上(12123为什么登不上去了,老是显示指纹验证)

    12123为什么登不上(12123为什么登不上去了,老是显示指纹验证)

  • 微信不绑定手机号安全吗(微信不绑定手机号登录不上怎么办)

    微信不绑定手机号安全吗(微信不绑定手机号登录不上怎么办)

  • 剪映怎么剪辑前面不要的音乐(剪映怎么剪辑前面多余的视频)

    剪映怎么剪辑前面不要的音乐(剪映怎么剪辑前面多余的视频)

  • 微信突然显示登录过期(微信突然显示登录过期请重新登录)

    微信突然显示登录过期(微信突然显示登录过期请重新登录)

  • 手机qq怎样好友恢复(手机qq怎么设置好友权限)

    手机qq怎样好友恢复(手机qq怎么设置好友权限)

  • 华为nova5pro手电筒打不开是啥原因(华为nova5Pro手电筒变白色)

    华为nova5pro手电筒打不开是啥原因(华为nova5Pro手电筒变白色)

  • 微信位置共享能听到对方说话吗(微信位置共享能一直开着吗)

    微信位置共享能听到对方说话吗(微信位置共享能一直开着吗)

  • 显示器typec接口有啥用

    显示器typec接口有啥用

  • 电信橙分期怎么取消(电信橙分期怎么彻底解除)

    电信橙分期怎么取消(电信橙分期怎么彻底解除)

  • 天才电话手表插卡步骤(天才电话手表插卡没反应)

    天才电话手表插卡步骤(天才电话手表插卡没反应)

  • 不小心删掉了短信怎么恢复(不小心删掉短信快捷怎么找回来)

    不小心删掉了短信怎么恢复(不小心删掉短信快捷怎么找回来)

  • 内存2400和3000差距(内存2400和3000差别大吗)

    内存2400和3000差距(内存2400和3000差别大吗)

  • 微信主界面怎么换图片(微信主界面怎么换皮肤)

    微信主界面怎么换图片(微信主界面怎么换皮肤)

  • 关闭彩信功能(关闭彩信功能等于取消彩信服务吗)

    关闭彩信功能(关闭彩信功能等于取消彩信服务吗)

  • 面对面快传怎么传视频(面对面快传怎么连接不上)

    面对面快传怎么传视频(面对面快传怎么连接不上)

  • 抖音怎么让别人看不到我的粉丝(抖音怎么让别人看不到ip地址)

    抖音怎么让别人看不到我的粉丝(抖音怎么让别人看不到ip地址)

  • 飞行模式在哪里(飞行模式在哪里设置)

    飞行模式在哪里(飞行模式在哪里设置)

  • 另一种解决Failed to execute goal on project xxx: Could not resolve dependencies for project com的方法(另一种答案)

    另一种解决Failed to execute goal on project xxx: Could not resolve dependencies for project com的方法(另一种答案)

  • 天猫提现一直没到账
  • 所得税费用本期金额怎么算
  • 无偿调入的固定资产
  • 保险费计入什么会计科目需要发票吗
  • 2021年超市发票税率是多少
  • 土地增值税清算的条件
  • 报损失怎么报
  • 半成品原材料报废会计处理怎么做?
  • 我国个人取得的各种所得有几种类型
  • 增值税税率简并纳税
  • 小额零星业务上限是多少
  • 筹建期员工社保分录
  • 公司注销对外投资股权有效吗
  • 金税盘增值税减免税申报明细表怎么填
  • 坏账准备年末余额怎么计算
  • 怎样去除快捷方式小箭头win10
  • 在win10系统中,如何限制孩子玩原神游戏
  • 进项已抵扣发票作废账务处理
  • 不良资产购买流程
  • 高新技术研发的会议有哪些
  • 生产废料怎么处理会计分录
  • php抓取网页指定内容
  • 笔记本电脑连无线网老是掉线怎么回事
  • hpcfont.dll
  • 公司开承兑出去 利息怎么算
  • php数组函数输出《咏雪》里有多少"片"字
  • 租赁经营账务处理办法
  • pc端微信扫码支付
  • 明细分类账户定义
  • PHP使用pear实现mail发送功能 windows环境下配置pear
  • 设备维修产生的人工费怎么开发票
  • thinkPHP中_initialize方法实例分析
  • vue前端面试官常问的问题
  • vite2.0 vue
  • 简单的画
  • 帝国cms做商城
  • 关于专利技术转让的说法
  • php变量有哪些特殊值
  • 上年度的企业所得税汇算清缴怎么查询
  • 借款的帐务处理?
  • 运输费用会计
  • 销项负数发票能作废吗
  • 个人所得税专项扣除2023最新政策
  • 哪些科目会影响损益
  • 应交税费属于什么负债
  • 应交税费期末余额在借方怎样处理
  • 国家土地补偿款
  • 固定资产无票怎样入账
  • 从政府取得土地使用权缴增值税吗
  • 购进原材料如何结转成本
  • 公司支付账户
  • 小规模纳税人月销售额超过10万怎么交税
  • 无形资产计入待摊费用
  • 建筑公司直接把钱打到个人账户怎么走账
  • 绿化补偿标准
  • 企业搬迁补偿款免税的法律依据是什么
  • 填制凭证的主要内容和注意事项
  • 工会经费按照什么计算缴纳
  • 出纳账户怎么设置
  • sqlserver数据库版本号怎么查
  • mysql 复制表结构并把满足条件的数据添加到新表
  • scair.exe是什么程序
  • 中国有多少台百万机组
  • win8怎么卸载应用程序
  • 在linux系统中
  • win10怎么这只让任务栏图标居中显示?
  • JavaScript数据类型分为哪两大类
  • Unity3D Editor类(Inspector) 编写经验总结
  • 安卓sdk目录下用来存放各种版本sdk的目录是
  • nodejs mongoose
  • 字符串查找子串
  • 给一个接口,然后怎么在vue里面调用
  • 编写高性能代码时以下哪种技术可用于减少内存访问延迟
  • #vr#
  • unity ngui
  • jquery怎么写轮播图
  • 税务局冬季作息时间
  • 展示板效果图
  • 商事登记本
  • 博兴公安局局长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设