小程序组件之间传值方式 ---- 自定义组件实现一个切换菜单
1、制作一个组件的菜单切换,并在父组件上引入,子组件的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!-- Tabs.wxml --> <view class = "Tabs_switch" > <view class = "Tabs_title" > <view class = "Tabs_modules {{item.isActive ? 'active' : ''}}" wx: for = "{{Tabs}}" wx:key= "id" bindtap= "handleItemTaP" data-index= "{{index}}" > {{item.name}} </view> </view> <view class = "Tabs_content" > <!-- 留一个插槽的位置 --> <slot></slot> </view> </view> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* Tabs.wxss */ .Tabs_switch .Tabs_title { display: flex; } .Tabs_switch .Tabs_title .Tabs_modules { flex: 1; display: flex; justify-content: center; align-items: center; padding: 20rpx 0; } .Tabs_switch .Tabs_title .active { border-bottom: 5rpx solid #eb4450; color: #eb4450; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // Tabs.js Component({ /** * 组件的属性列表 */ // 从父组件接收的data 会自动同步到 子组件的data 对象里面 properties: { Tabs:{ type:Array, value:[] } }, /** * 组件的初始数据 */ data: { }, /** * 组件的方法列表 */ methods: { handleItemTaP(e){ const index = e.target.dataset; //triggerEvent方法用法类似于Vue中的emit() this .triggerEvent( 'myevent' ,index) } } }) |
2、父组件(index)需要在index.json引入Tabs组件,代码如下:
1 2 3 4 5 | { "usingComponents" : { "Tabs" : "../../components/Tabs/Tabs" } } |
3、index.wxml代码如下:
1 2 3 4 5 | <Tabs Tabs= "{{cateData}}" bindmyevent= "handlemyevent" > <block wx: if = "{{cateData[0].isActive}}" >0</block> <block wx:elif= "{{cateData[1].isActive}}" >1</block> <block wx:elif= "{{cateData[2].isActive}}" >2</block> </Tabs> |
4、index.js代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | Page({ /** * 页面的初始数据 */ data: { cateData: [{ id: 0, name: '综合' , isActive: true }, { id: 1, name: '销量' , isActive: false }, { id: 2, name: '价格' , isActive: false } ] }, handlemyevent(e) { let { index } = e.detail; console.log(index) var tabs = this .data.cateData; tabs.forEach((item, v) => { if (item.id === index) { tabs[v].isActive = true ; } else { tabs[v].isActive = false ; } }); this .setData({ cateData: tabs }); } }) |
5、最终我们可以得到以下菜单栏切换的效果,随着菜单栏的切换对应的内容也发生改变。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具