讲师中心 微信公众号
AI工具推荐 视频效率加速

uni-app自定义组件方法 uni-app组件之间如何传值

秋丽同学_1078

秋丽同学_1078

发布时间:2026-03-25 14:59:02

|

527人浏览过

|

来源于php中文网

原创

uni-app父子组件v-model传值需遵循value/input规范,自定义key用v-model:xxx;App端nvue不支持v-model和uni.$on;props引用类型需深拷贝;跨组件通信优先url参数+onLoad,避免ref调用。

uni-app自定义组件方法 uni-app组件之间如何传值

uni-app 父子组件用 v-model 传值最省事,但得写对绑定逻辑

uni-app 的 v-model 不是原生 Vue 那套的简单糖衣——它默认只认 value prop 和 input 事件。如果你自定义组件里用的是 props: ['msg'] + this.$emit('change', val),v-model 就会静默失效,没报错也没反应。

实操建议:

  • 父组件写 <my-input v-model="searchText"></my-input>
  • 子组件必须声明 props: ['value'],且触发 this.$emit('input', newValue)
  • 如果想换 key(比如用 msg 代替 value),得显式写 v-model:msg="text" + 子组件 props: ['msg'] + this.$emit('update:msg', val)
  • H5 和小程序平台都支持,但 App 端(nvue)不支持 v-model,得切回 @input + :value 手动绑定

跨层级或非父子组件用 uni.$emit / uni.$on,但别忘了销毁

uni-app 提供了全局事件总线 uni.$emit 和 uni.$on,适合页面跳转后、兄弟组件间、或者从 uni-app 页面向自定义组件传参这种“不好直接引用”的场景。

常见错误现象:页面 A 发送事件,页面 B 的组件监听了,但 B 被关闭后监听器还在内存里,下次进 A 再发一次,B 的旧实例就又响应一遍——结果数据错乱、重复请求、甚至报 Cannot read property 'xxx' of null。

实操建议:

  • 在组件 mounted 里用 uni.$on('login-success', handler) 监听
  • 必须在 beforeDestroy(Vue 2)或 onUnload(uni-app 生命周期)里调用 uni.$off('login-success', handler)
  • 不要用匿名函数监听:uni.$on('x', () => {...}) → 后续无法 off
  • App 端 nvue 页面不支持 uni.$on,得改用 uni.$emit + 页面级 onLoad 中监听(仅限页面)

props 传对象或数组时,子组件改了父组件数据会意外同步

这是 JS 引用类型的老问题,但在 uni-app 里更容易被忽略——因为 template 里看不出深浅拷贝,props 又是只读警告(开发时可能关了提示),结果子组件一改 props.list.push(),父组件的数据就变了。

使用场景:表单组件接收一个 config 对象做初始设置,用户操作后子组件想更新它并同步给父组件。

实操建议:

  • 子组件内部要用 JSON.parse(JSON.stringify(props.obj)) 或 Object.assign({}, props.obj) 做浅拷贝(仅一层)
  • 深层嵌套对象推荐用 lodash.cloneDeep,但注意小程序端不能直接 require,得用 npm 构建后引入
  • 更稳妥的做法是:父组件传原始数据,所有修改都通过 $emit 抛出去,由父组件决定是否更新自身 data
  • App 端 nvue 中,props 是深拷贝传递的,不会出现这个问题;但 H5 和微信小程序仍是引用传递

页面和自定义组件之间传值,优先走 url 参数 + onLoad,别硬绑 ref

有人想在页面里 ref 一个自定义组件然后直接调它的方法,比如 this.$refs.child.doSubmit()。这在 H5 上能跑,但微信小程序里 ref 指向的是虚拟节点,不是真实组件实例,调方法会报 doSubmit is not a function;App 端 nvue 更干脆,ref 根本不生效。

实操建议:

  • 页面跳转传参统一走 uni.navigateTo({ url: '/pages/list/list?category=1&keyword=test' })
  • 目标页面在 onLoad 里取 options.category,再通过 props 传给子组件
  • 如果需要反向触发(比如子组件要通知页面刷新),用 uni.$emit + 页面监听,比 ref 兼容性高得多
  • 真要调子组件方法?只在 H5 场景下考虑,并加运行时判断:if (uni.getSystemInfoSync().platform === 'h5') { this.$refs.child?.doX() }
复杂点在于不同平台对响应式机制和事件系统的实现差异太大,同一个写法在 H5 行、小程序卡、App 端直接挂——传值逻辑得按平台兜底,而不是指望一套代码全跑通。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2623

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5683

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6650

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6358

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

903

2024.05.22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn