位置: IT常识 - 正文

uniapp和vue组件之间的传值方法(父子传值,兄弟传值,跨级传值,vuex)(uniapp和vue哪个好)

编辑:rootadmin
uniapp和vue组件之间的传值方法(父子传值,兄弟传值,跨级传值,vuex) 前言

推荐整理分享uniapp和vue组件之间的传值方法(父子传值,兄弟传值,跨级传值,vuex)(uniapp和vue哪个好),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue+uniapp,vue3 uniapp,vue+uniapp,uniapp和vue的区别,uniapp与vue的关系,uniapp与vue,vue+uniapp,vue+uniapp,内容如对您有帮助,希望把文章链接给更多的朋友!

在做vue项目或者uniapp开发微信小程序时,经常会用到组件之间传值,因此想总结记录下。

一、父子传值父向子传递:props子向父传递:通过 events($emit)父组件想调用子组件的方法:通过 this.$refs(ref)

a)ref 用在组件可以调用组件的属性方法 b)ref 用在标签可以对标签进行操作 c) ref属性不能用在uniapp的内置组件上面,只能用在自定义组件上面;用在内置组件比如<view>标签,this.$refs.xxx获取dom是undefind

父组件调用子组件的方法

// 父组件<template> <view> <view class="index-goods-list-con"> <WaterfallList ref="waterFallCon" :status="waterfall.status" :list="waterfall.list" :reset="waterfall.reset" @clickCard="onClickCard" @handleGood="handleGood" @done="onDone" ></WaterfallList> </view> </view></template><script>import WaterfallList from '@/components/waterfall/waterfall-list.vue'export default { data() { return {} }, methods: { handleDailyBestGood(e, good) { // 用$refs赋值调用子组件的handleDailyBestNum方法 this.$refs.waterFallCon.handleDailyBestNum(good) }, },}</script><style></style>// 子组件<template></template><script>export default { data() { return { renderBasic: '' } }, methods: { //父组件调用的方法 handleDailyBestNum(good) { //good 是父组件弹窗传递过来的值,我们可以打印看看 console.log(good) this.renderBasic = good }, },}</script>二、兄弟传值

借助中间代理, $emit 和 $on 比如在uniapp项目中使用兄弟传值,vue同理 uniapp页面通讯官方文档

a) 说明

b) 使用场景

在商品下单页点击选择优惠券,进入优惠券页面,选择一张适合的,再返回下单页,需要带着优惠券id返回,现在商品 提交订单页和优惠券页面是 跨页面 的。

uniapp和vue组件之间的传值方法(父子传值,兄弟传值,跨级传值,vuex)(uniapp和vue哪个好)

c) 使用方法

//优惠券页面 clickCoupon (item) { if (this.orderSource) { // 触发全局自定义事件,传参id uni.$emit('updateData', item.id) uni.navigateBack({ delta: 1}) } }, // 从优惠券跳回下单页 // 监听全局自定义事件updateData,接收参数id uni.$on('updateData', async function (couponId) { that.couponId = couponId })

d) 注意事项

uni.$emit、 uni.$on 、 uni.$once 、uni.$off 触发的事件都是 App 全局级别的,跨任意组件,页面,nvue,vue 等使用时,注意及时销毁事件监听,比如,页面 onLoad 里边 uni.$on 注册监听,onUnload 里边uni.$off 移除,或者一次性的事件,直接使用 uni.$once 监听。注意 uni.$on 定义完成后才能接收到 uni.$emit 传递的数据三、祖孙或者更深嵌套的组件间传值: provide/inject

a) 类型

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

b) 详细

这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。provide 选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的 property。inject 选项应该是: 一个字符串数组,或一个对象提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

c) 使用场景

如果要将祖先组件直接传递给孙子组件,我们要将props逐级传递下去:祖先组件 =》子组件 =》孙子组件,而通过provide/inject,可直接从祖先组件传给孙子组件,即使再嵌套多层也没关系。 d) 使用方法

<template> <div> <button @click="changeMsg">祖组件触发</button> <h1>祖组件</h1> <parent></parent> </div></template><script>import parent from './parent.vue';export default { data(){ return{ obj:{ name:'JavaScript', }, developer:'布兰登·艾奇', year:1995, update:'2021年06月', } }, provide(){ return { obj: this.obj, // 方式1.传入一个可监听的对象 developerFn:() => this.developer, // 方式2.通过 computed 来计算注入的值 // developerFn: this.getDeveloper, 方式3.或者调用一个方法,也能实现响应式 year: this.year, // 方式4.直接传值 app: this, // 方式5. 提供祖先组件的实例 缺点:实例上挂载很多没有必要的东西 比如:props,methods。 } }, components: { parent, }, methods:{ getShowCartValue() { return this.developer }, changeMsg(){ this.obj.name = 'Vue'; this.developer = '尤雨溪'; this.year = 2014; this.update = '2021年6月7日'; }, },}</script>

子组件

<template> <div class="wrap"> <h4>子组件(只做中转)</h4> <child></child> </div></template><script>import child from './child.vue';export default { components:{ child, },}</script>

孙组件

<template> <div> <h5>孙组件</h5> <span>名称:{{obj.name}}</span> | <span>作者:{{developer}}</span> | <span>诞生于:{{year}}</span> | <span>最后更新于:{{this.app.update}}</span> </div></template><script>export default { computed:{ developer(){ return this.developerFn() } }, inject:['obj','developerFn','year','app'],}</script>

未点击按钮,原有状态 当点击按钮触发 changeMsg 方法后,效果如下: 对比一下前后差异:无论点击多少次,孙组件中的诞生于 year 字段永远都是1995 并不会发生变化,通过 方式1、方式2、方式3、方式5传值是可以响应的。

正是官网所提到的:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

注意: 1)另外如果孙子组件更改祖先组件传来的值,会发现祖先组件的值也会跟着变,所以慎用 provide / inject; 2)Vuex 和 provide/inject 最大的区别:Vuex 中的全局状态的每次修改是可以追踪回溯的,而 provide/inject 中变量的修改是无法控制的。换句话说,不知道是哪个组件修改了这个全局状态。

所以对于业务庞大而复杂的,还是建议使用vuex~

四、更复杂的结构:vuex

请移步看我之前写的关于vuex使用总结文章,学习笔记之Vuex总结(Vue状态管理)

参考: provide、inject例子讲解参考这个

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

上一篇:大二C#实现酒店管理系统(C端展示、前台操作、登记入住、入住管理、职位管理、公告系统等)(c语言设计酒店管理系统)

下一篇:ChatGPT中文版重装上阵(chatbot下载)

  • 苹果11如何关静音模式(苹果如何关静音震动)

    苹果11如何关静音模式(苹果如何关静音震动)

  • 华为nova7如何批量删除联系人(华为nova 7怎样)

    华为nova7如何批量删除联系人(华为nova 7怎样)

  • 华为荣耀20青春版发售时间(华为荣耀20青春版上市时间和价格)

    华为荣耀20青春版发售时间(华为荣耀20青春版上市时间和价格)

  • 怎样给手机充电(怎样给手机充电能延长手机寿命)

    怎样给手机充电(怎样给手机充电能延长手机寿命)

  • 手机需要阻止cookie吗(手机阻止弹窗在哪关闭)

    手机需要阻止cookie吗(手机阻止弹窗在哪关闭)

  • 华为光感应器怎么设置(华为光感器在哪设置)

    华为光感应器怎么设置(华为光感器在哪设置)

  • qq莫名其妙重新登录(qq突然要重新登录是什么意思)

    qq莫名其妙重新登录(qq突然要重新登录是什么意思)

  • 电脑画面卡住发出噪音(电脑画面卡住发出dedede声音)

    电脑画面卡住发出噪音(电脑画面卡住发出dedede声音)

  • 照片命名格式是什么(照片命名是什么)

    照片命名格式是什么(照片命名是什么)

  • qq礼物墙怎么关闭(qq礼物墙怎样关闭)

    qq礼物墙怎么关闭(qq礼物墙怎样关闭)

  • 微信原图不原图的区别(微信图片原图和不是原图什么区别)

    微信原图不原图的区别(微信图片原图和不是原图什么区别)

  • 怎么补手机卡(电信网上怎么补手机卡)

    怎么补手机卡(电信网上怎么补手机卡)

  • 手机内爆屏怎么处理(手机屏内爆了怎么办)

    手机内爆屏怎么处理(手机屏内爆了怎么办)

  • 快手推广曝光量啥意思(快手推广曝光量怎么收费)

    快手推广曝光量啥意思(快手推广曝光量怎么收费)

  • 手机录像在哪里找到(手机录像在哪里调尺寸)

    手机录像在哪里找到(手机录像在哪里调尺寸)

  • ps图层解锁快捷键(photoshop图层解锁快捷键)

    ps图层解锁快捷键(photoshop图层解锁快捷键)

  • 什么是径向渐变(径向渐变的特点)

    什么是径向渐变(径向渐变的特点)

  • 小米来电秀怎么自定义(小米来电秀怎么添加自己的视频)

    小米来电秀怎么自定义(小米来电秀怎么添加自己的视频)

  • 文档不能修改怎么处理(文档不让修改怎么办)

    文档不能修改怎么处理(文档不让修改怎么办)

  • 苹果x怎么连接小爱同学(苹果x怎么连接iTunes)

    苹果x怎么连接小爱同学(苹果x怎么连接iTunes)

  • u盘泡水里一周还能用吗(u盘泡了水)

    u盘泡水里一周还能用吗(u盘泡了水)

  • 小爱音箱可以两个手机用吗(小爱音箱可以两台手机连接吗)

    小爱音箱可以两个手机用吗(小爱音箱可以两台手机连接吗)

  • 酷猫vip怎么取消连续包月(开通了酷猫vip会员怎么取消?)

    酷猫vip怎么取消连续包月(开通了酷猫vip会员怎么取消?)

  • 谷歌浏览器怎么设置翻译(谷歌浏览器怎么清理缓存)

    谷歌浏览器怎么设置翻译(谷歌浏览器怎么清理缓存)

  • Tenda路由器管理页面打不开显示403 Forbidden怎么办(腾达路由器管理员密码)

    Tenda路由器管理页面打不开显示403 Forbidden怎么办(腾达路由器管理员密码)

  • 推迟月经小窍门,两招教你如何推迟月经(推迟月经小窍门有民间土方法吗?)

    推迟月经小窍门,两招教你如何推迟月经(推迟月经小窍门有民间土方法吗?)

  • win10原版安装教程(原版win10系统安装方法)

    win10原版安装教程(原版win10系统安装方法)

  • 努沙杜瓦海岸与防波堤,印度尼西亚巴厘岛 (© Dkart/Getty Images)(努沙杜瓦酒店)

    努沙杜瓦海岸与防波堤,印度尼西亚巴厘岛 (© Dkart/Getty Images)(努沙杜瓦酒店)

  • 路由器无线设置(路由器无线设置模式哪个更快)

    路由器无线设置(路由器无线设置模式哪个更快)

  • 建筑业如何分项目核算
  • 发票开错抬头做红字发票的账务处理
  • 小规模企业出租设备税率
  • 实习生个人所得税需要申报吗
  • 小规模季度30万免税
  • 工会经费入账
  • 从一个公司到另一个公司公积金
  • 应纳税所得额就是企业所得税吗
  • 一张报关单上最多不能超过
  • 增值税电子发票怎么下载
  • excel单元格内换行macbook
  • 货到票未到的会计账务处理
  • 把黑龙江省
  • 社保申报怎么查询
  • 车辆购置税通过应交税费吗
  • 非居民企业间接转让中国应税财产
  • 股东不发工资只给员工钱
  • 银行承兑汇票和银行汇票的区别
  • 商业自持店铺出租合法吗
  • 公司备用金申请单
  • 三元运算符判断闰年php
  • 认缴制注册资金不交可以吗
  • 汇算清缴针对哪些对象
  • 租入固定资产改建支出何时开始摊销
  • antd-vue-pro
  • 变动成本产品成本包括哪些
  • 考研408怎么样
  • 关于php文件的自动播放
  • php文件上传用什么请求方法
  • 嵌入html
  • html 教程
  • 14个Python处理Excel的常用操作,非常好用
  • thinkphp用户token
  • php入门基础教程
  • urljoin使用
  • 计提坏账准备的前提条件
  • 税控盘开票日期一般截止到下个月几号
  • 预缴税款为什么不能跨月申报
  • 公司给员工的福利语句
  • 暂估库存商品计算怎么算
  • 什么叫现金流量表举例说明
  • 开具增值税专用发票是什么意思
  • 个税累计预扣法导致税交多了
  • 小规模季度交税分录怎么做
  • 事业单位收到专票的风险
  • 电梯安装费如何分摊
  • 运费发票抵扣要求
  • 收到材料发票怎么写摘要
  • 公司股权变更如何合理避税
  • 收到政府补助的会计分录
  • 未使用的固定资产计提折旧计入什么科目
  • 进料料件复出可以给第三方吗
  • 差旅费包干管理办法
  • 现金流量表和利润表的勾稽关系
  • 收到个人支付的培训费可以开对公的发票吗
  • Vista下WMC不能播放RMVB解决办法
  • freebsd使用手册
  • 去掉快捷功能
  • deepin-win
  • 微软windows1
  • 在linux系统中,用来存在系统所需
  • js跨域8种解决方案
  • jquery代码实现鼠标点击
  • unicode 字符百科
  • div +css
  • firefox下rowspan+border+border-collapse的bug
  • js获取checkbox选中的元素
  • webview实现有什么用
  • css网页布局方式
  • vue自定义过滤器的语法
  • 如何解决android兼容问题
  • vue switch组件
  • 使用GeoPainter一步一步布置场景
  • python中的条件判断和循环语句
  • python crc
  • 安卓手机与电脑连接方法
  • 如何彻底删除android
  • 税控盘怎么申请领发票
  • 人工成本占企业利润比例
  • 青岛电子税务局电话人工客服电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设