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

  • 网店的推广方法(网店推广方法分类)

    网店的推广方法(网店推广方法分类)

  • 蓝牙耳机怎么断开连接(蓝牙耳机怎么断断续续的声音)

    蓝牙耳机怎么断开连接(蓝牙耳机怎么断断续续的声音)

  • 学习通怎么退出班级

    学习通怎么退出班级

  • 酷喵会员怎么在手机上开通(酷喵会员怎么在电脑用)

    酷喵会员怎么在手机上开通(酷喵会员怎么在电脑用)

  • 华为畅享10的解锁方式有几种(华为畅享10解锁)

    华为畅享10的解锁方式有几种(华为畅享10解锁)

  • 软件闪退是什么原因(软件闪退是什么情况电脑)

    软件闪退是什么原因(软件闪退是什么情况电脑)

  • 抖音从哪里看好友是否在线(抖音从哪里看好友在线状态)

    抖音从哪里看好友是否在线(抖音从哪里看好友在线状态)

  • 微信顾客付款后怎么联系对方(微信顾客付款后叫退款,然后又重新支付)

    微信顾客付款后怎么联系对方(微信顾客付款后叫退款,然后又重新支付)

  • 拼多多上限怎么解除(拼多上限次数要等多长时间)

    拼多多上限怎么解除(拼多上限次数要等多长时间)

  • 看不了对方的朋友圈是怎么回事(看不了对方的朋友圈是被屏蔽了吗)

    看不了对方的朋友圈是怎么回事(看不了对方的朋友圈是被屏蔽了吗)

  • 小米10p和华为p40p对比(小米10和华为p40pro哪个更好)

    小米10p和华为p40p对比(小米10和华为p40pro哪个更好)

  • 快手经常搜一个人他知道吗(快手经常搜一个人,她会发现吗)

    快手经常搜一个人他知道吗(快手经常搜一个人,她会发现吗)

  • 华为mate10可以无线充电吗(华为mate10可以无线反向充电吗)

    华为mate10可以无线充电吗(华为mate10可以无线反向充电吗)

  • 荣耀20青春版有红外遥控吗(荣耀20青春版有没有nfc)

    荣耀20青春版有红外遥控吗(荣耀20青春版有没有nfc)

  • bios启动项无硬盘但pe里有(bios启动项无硬盘sata有硬盘)

    bios启动项无硬盘但pe里有(bios启动项无硬盘sata有硬盘)

  • 苹果iOS12增加了哪些新的功能(iphone12增加了什么)

    苹果iOS12增加了哪些新的功能(iphone12增加了什么)

  • wadl的大文件可以删除吗(dae文件太大怎么办)

    wadl的大文件可以删除吗(dae文件太大怎么办)

  • 华为mate9发布会时间(华为mate9发布会价格)

    华为mate9发布会时间(华为mate9发布会价格)

  • 手机插卡无服务怎么回事(很久没用的手机插卡无服务)

    手机插卡无服务怎么回事(很久没用的手机插卡无服务)

  • iphone7p是什么处理器(iphone7p是啥处理器)

    iphone7p是什么处理器(iphone7p是啥处理器)

  • wps字体如何无限加粗(wps字体如何无限放大)

    wps字体如何无限加粗(wps字体如何无限放大)

  • 闲鱼验机会不会被拆机(闲鱼验机会不会升级系统)

    闲鱼验机会不会被拆机(闲鱼验机会不会升级系统)

  • 西瓜视频怎么注销账户(西瓜视频怎么注销不了)

    西瓜视频怎么注销账户(西瓜视频怎么注销不了)

  • 0x0000007f怎么修复(0x0000007f解决)

    0x0000007f怎么修复(0x0000007f解决)

  • Umi4 从零开始实现动态路由、动态菜单(umi ts)

    Umi4 从零开始实现动态路由、动态菜单(umi ts)

  • echarts中的legend属性(echarts中的legend能被监听吗)

    echarts中的legend属性(echarts中的legend能被监听吗)

  • 长期待摊费用一般指什么
  • 企业代扣代缴个人所得税
  • 疫情期间公司买水
  • 飞机票的快递费多少钱
  • 技改贴息资金的财务、会计及税收处理
  • 折扣金额发票
  • 亏损企业能不能无常捐赠
  • 建设用地规划许可证和建设工程规划许可证的区别
  • 商铺出租怎么做账
  • 原材料计划成本和实际成本的区别
  • 发票过期了还能抵扣吗
  • 注册资本低于实际投资
  • 给评委发酬劳怎么扣税?
  • 质量问题扣款账务处理
  • 支付拆迁补偿款
  • 小规模纳税人开具增值税专用发票
  • 员工激励该怎么表达
  • 开错的发票正常入账吗
  • 零售环节包括哪些
  • 子公司向母公司借款
  • 汇兑损益计算例题
  • 现金预算在企业财务管理中是何地位
  • 清算资本公积中的股本溢价应该怎么处理
  • 怎么关闭电量低
  • 未分配利润分配利润分录
  • 非上市公司转让股权需要缴纳增值税吗
  • 数人侵权行为的类型
  • 增值税税控系统折旧
  • cortana小娜可以卸载吗
  • 让绿萝疯长的妙招
  • 文竹怎么养才能更旺盛浇点醋
  • 商品先入库后得发票如何做账
  • 若依项目制作饼状图和柱状图
  • 农业经营许可证范围
  • 无法偿还的应付账款计入什么科目
  • 无形资产的摊销应计入什么科目
  • vue在项目中怎么用的
  • php标准数据类型共有四种
  • php制作验证码
  • 指令获取
  • 筹备期间费用怎么做分录
  • java基本框架
  • 实例理解SQL中truncate和delete的区别
  • 帝国cms会员发布信息数量
  • mysql中的索引有
  • 公允价值变动损益属于什么科目
  • 管理费用里面包括哪些明细科目
  • 股东分红会计分录
  • 票据质押如何做账
  • 印花税需要计提吗2023
  • 质量问题举例
  • 车辆购置税的税目有哪些
  • 还账准备计提方法
  • 库存商品用于研发分录
  • 如果以前做了错事怎么办
  • 净资产收益率怎么算出来的
  • mysql8.0优化
  • mysql 元数据管理
  • 关于存储过程的描述
  • dlg是什么意思中文
  • Win7 64位旗舰版中让SSD固态硬盘更快的优化方法
  • vmware workstation15安装ubuntu
  • centos安装rz命令
  • window10光驱
  • window10如何修改电脑名称
  • win10开机6秒
  • 编辑器组件
  • css实现下拉菜单的思路是
  • opengl transform
  • jquery插件使用教程
  • 批处理加密工具
  • vue+node+webpack环境搭建教程
  • unity获取当前位置
  • js与jquery的关系
  • jquery操作html代码
  • html做一个新闻app首页
  • 国家对供暖企业更换主管道有没有年限?
  • 宁波车管所作息时间
  • 三方协议暂不支持缴款
  • 纳税是什么税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设