位置: IT常识 - 正文

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

发布时间:2024-01-17
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(大语言模型集成工具)

  • macbookpro摄像头权限在哪里打开(macbookpro摄像头打不开)

    macbookpro摄像头权限在哪里打开(macbookpro摄像头打不开)

  • 手机淘宝的体检中心在哪里(手机淘宝体检中心怎么找不到了)

    手机淘宝的体检中心在哪里(手机淘宝体检中心怎么找不到了)

  • 注册微信好友辅助二维码过期怎么办(注册微信好友辅助验证)

    注册微信好友辅助二维码过期怎么办(注册微信好友辅助验证)

  • 充值的快币还能提现吗(充了的快币能不能退回来)

    充值的快币还能提现吗(充了的快币能不能退回来)

  • 机器数的表示范围由CPU中的寄存器决定(机器数的表示范围称为字长)

    机器数的表示范围由CPU中的寄存器决定(机器数的表示范围称为字长)

  • 华为畅享6s隐藏功能(华为畅享怎么隐藏图标)

    华为畅享6s隐藏功能(华为畅享怎么隐藏图标)

  • 咸鱼网是干什么的啊(咸鱼网是闲鱼网吗)

    咸鱼网是干什么的啊(咸鱼网是闲鱼网吗)

  • 华为med-al00是什么型号手机(华为med aloo是什么型号手机)

    华为med-al00是什么型号手机(华为med aloo是什么型号手机)

  • 全部选中的快捷键是什么(全选的快捷按钮)

    全部选中的快捷键是什么(全选的快捷按钮)

  • 一个人可以有几个淘宝实名账号(一个人可以有几个微信号)

    一个人可以有几个淘宝实名账号(一个人可以有几个微信号)

  • 笔记本电脑不插电源能用多久(笔记本电脑不插电使用会有损寿命吗)

    笔记本电脑不插电源能用多久(笔记本电脑不插电使用会有损寿命吗)

  • 电话阻止来电能收到对方的信息吗(电话阻止来电能收到对方电话怎么提醒)

    电话阻止来电能收到对方的信息吗(电话阻止来电能收到对方电话怎么提醒)

  • 华为 mate x 发售时间

    华为 mate x 发售时间

  • 控制总线是单向还是双向(控制总线单向双向)

    控制总线是单向还是双向(控制总线单向双向)

  • 有什么软件可以把图片上的文字提取出来(有什么软件可以监控对方手机)

    有什么软件可以把图片上的文字提取出来(有什么软件可以监控对方手机)

  • 苹果6老是自动重启怎么回事(苹果6老是自动关机怎么办)

    苹果6老是自动重启怎么回事(苹果6老是自动关机怎么办)

  • word文档中字怎么竖着(word文档中字怎么居中)

    word文档中字怎么竖着(word文档中字怎么居中)

  • qq空间删过的视频怎么恢复(qq空间删除过的视频在哪里)

    qq空间删过的视频怎么恢复(qq空间删除过的视频在哪里)

  • 微信视频无法获取摄像头数据是怎么回事(微信视频无法获取)

    微信视频无法获取摄像头数据是怎么回事(微信视频无法获取)

  • 滴滴打车往返怎么操作(滴滴打车往返怎么修改)

    滴滴打车往返怎么操作(滴滴打车往返怎么修改)

  • 微信上传视频怎么不被压缩(微信上传视频怎么高清)

    微信上传视频怎么不被压缩(微信上传视频怎么高清)

  • 苹果xr开机键在哪里(苹果手机xr开机键)

    苹果xr开机键在哪里(苹果手机xr开机键)

  • Linux下安装使用sar工具来获取系统运行状态(linux安装常用命令)

    Linux下安装使用sar工具来获取系统运行状态(linux安装常用命令)

  • 附加税申报免抵税额什么意思
  • 增值税一般纳税人证明文件
  • 房产税从价改从租,多缴税款要加收滞纳金吗
  • 防伪税控税务端官网
  • 利息可以抵税是什么意思
  • 进项税额比销项税额大怎么办
  • 公司年末报表
  • 国外酒店打印的住宿单可以入账吗
  • 员工福利费可以公账出吗
  • 税收分类编码不对发票可以用吗
  • 资本公积与什么有关
  • 中期票据怎么入账
  • 长期待摊费用做在什么记账凭证里
  • 股权转让溢价部分怎么做分录
  • 短期借款超过一年未归还转到哪会计视野
  • 视同销售存货账务处理方法是什么?
  • 辅助生产交互分配后的实际费用应在进行分配
  • 企业内部员工稿费
  • 旧设备变现损失抵减所得税怎么算
  • 维修费增值税怎么开
  • 认缴制下股权转让如何不交税
  • 购进货物运费会退吗
  • 多计提的费用怎么冲销
  • 研发费用发票怎么入账
  • 增值税留抵退税怎么记账
  • 应付职工薪酬科目的应用
  • 母子公司之间的借款利息支出增值税能否抵扣
  • 工程施工开发票如何进行会计核算?
  • 购买原材料无法确认收入
  • 华为鸿蒙系统如何关闭hd通话
  • linux怎么设置
  • 社保生育费用报销
  • office2016安全模式
  • 有一个设置
  • 微软window
  • 肚子胀气怎么办 4个方法快速排气很轻松
  • antd upload组件
  • PHP:imagecopyresampled()的用法_GD库图像处理函数
  • 税金及附加在哪里申报
  • php百分比
  • 计提社保会计分录金额怎么写
  • 交通运输增值税专票
  • 财务咨询公司能出尽调报告吗
  • php安装插件
  • java中空字符怎么表示
  • phpcms怎么修改模板风格
  • uni appp
  • 银行询证函快递费计入什么科目
  • 一般纳税人是怎么征收
  • 行政事业单位福利费开支范围文件
  • 甲供材甲方如何缴纳增值税
  • SQL Server UPDATE语句的用法详解
  • 购进交通运输服务可以抵扣
  • 网站维护费用
  • 应交增值税转入未交增值税怎么算
  • 小微企业免税销售额是多少2023年
  • 采购未到票如何入账
  • 收到工会经费如何处理
  • 刻章需要准备的资料
  • 劳务费能否作为农民工工资优先支付
  • 专用发票怎么网上申领
  • sql数据库连不上可能的原因
  • win7系统打开计算机的管理出现正在向控制台添加属性
  • 苹果电脑mac系统怎么用
  • mac怎么复制粘贴文件夹
  • linux系统编译命令
  • win7系统设置只让安装有证书的软件
  • 如何给windowsXP磁盘加密码
  • win7休眠模式在哪
  • 360修复win7
  • 批量win10激活码怎么弄
  • cocos2dx 不规则按钮的实现
  • unity3d颜色
  • html淘宝搜索框代码
  • unix linux
  • 基于unity3d
  • JavaScript中setUTCMilliseconds()方法的使用详解
  • 重庆市电子税务局官网登录入口
  • 纳税人接受教育
  • 1月纳税申报截止时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号