uniapp项目中使用vue3和小程序组件父子通信

uniapp官方文档地址:https://uniapp.dcloud.net.cn/tutorial/miniprogram-subject.html#%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E6%94%AF%E6%8C%81

注意事项

页面路由中的文件不能引用项目特殊文件夹 wxcomponents(或 mycomponents、swancomponents)下的 js 文件,否则这些文件会被编译。

小程序组件需要放在项目特殊文件夹 wxcomponents(或 mycomponents、swancomponents)。HBuilderX 建立的工程 wxcomponents 文件夹在 项目根目录下。vue-cli 建立的工程 wxcomponents 文件夹在 src 目录下。可以在 vue.config.js 中自定义其他目录

小程序组件的性能,不如 vue 组件。使用小程序组件,需要自己手动 setData,很难自动管理差量数据更新。而使用 vue 组件会自动 diff 更新差量数据。所以如无明显必要,建议使用 vue 组件而不是小程序组件。比如某些小程序 ui 组件,完全可以用更高性能的 uni ui 替代。

当需要在 vue 组件中使用小程序组件时,注意在 pages.json 的 globalStyle 中配置 usingComponents,而不是页面级配置。

注意数据和事件绑定的差异,组件使用时应按照 vue 的数据和事件绑定方式

属性绑定从 attr="",改为 :attr="a";从 title="复选框" 改为 :title="'复选框' + item"

事件绑定从 bind:click="toggleActionSheet1" 改为 @click="toggleActionSheet1",目前支付宝小程序不支持 vue 的事件绑定方式,具体参考:支付宝小程序组件事件监听示例

阻止事件冒泡 从 catch:tap="xx" 改为 @tap.native.stop="xx"

wx:if 改为 v-if

wx:for="" wx:key="" 改为v-for="(item,index) in list"

详细的小程序转 uni-app 语法差异可参考文档https://ask.dcloud.net.cn/article/35786。

父传子示例

在unipp的vue3项目中创建了一个微信小程序原生的组件,并将其引入到vue3中使用:

在小程序组件中定义传递的数据类型:

然后在vue3中定义变量传给小程序组件:

子组件就可以获取这个数据了:打印出来的数据正常

子组件传递父

在子组件中触发事件,并传递数据:

在父组件中绑定函数:

相关推荐
anOnion7 小时前
构建无障碍组件之Menu Button pattern
前端·html·交互设计
用户47949283569157 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端
zhangxingchao10 小时前
Kotlin常用的Flow 操作符整理
前端
IT_陈寒11 小时前
React的useState居然还有这种坑?我差点删库跑路
前端·人工智能·后端
Pedantic12 小时前
SwiftUI 手势笔记
前端·后端
橙子家13 小时前
浏览器缓存之【结构化数据库与缓存】: IndexedDB、Cache storage 和 Storage buckets
前端
user205855615181313 小时前
X6 中边悬浮置顶,规避 `mouseleave` 事件丢失问题
前端
李明卫杭州13 小时前
CSS aspect-ratio 属性完全指南
前端
Pedantic15 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端