小程序自定义组件
小程序自定义组件
一、 父组件中的相关代码如下
1. 在自定义组件的文件夹中创建一个Tabs的组件,如下:
wxml中代码如下:
<!--components/Tabs.wxml--> <view class="tabs"> <view class="tabs_title"> <!-- 遍历子模块中的数组,注意这个tabs是从模块中传过来的 --> <view wx:for="{{tabs}}" wx:key="id" class="title_item {{item.isActive?'active':''}}" bindtap="handleItemTab" data-index="{{index}}"> {{item.value}} </view> </view> <view class="tabs_content"> <slot></slot> </view> </view>
其中 handleItemTab中的相关代码如下:
methods: { //点击事件 handleItemTab(e){ console.log(e); const {index}=e.currentTarget.dataset //定义自定义事件 this.triggerEvent("TabsItemChanges",{index}) console.log(index) } }
便利的元素是在子模块中定义的数组,所以需要接收过来,就是上方用到的tabs,那么是如何使用子模块中的数据,如下就是接收的关键代码:
/** * 组件的属性列表 */ properties: { //接收tabs的数据 tabs:{ type:Array, value:[] } },
二、子模块中的代码:
1. 先在.json文件中引用这个公共的模块。
"usingComponents": { "Tabs":"../../components/Tabs" },
2. wxml中使用上面的Tabs组件,如下:其中tabs是把定义的数据传送给父组件中,handletabsItemChange主要是在模块中更新数据的值。
<Tabs tabs="{{tabs}}" bindTabsItemChanges="handletabsItemChange"> <block wx:if="{{tabs[0].isActive}}">1</block> <block wx:elif="{{tabs[1].isActive}}">2</block> <block wx:elif="{{tabs[2].isActive}}">3</block> </Tabs>
3. js中的代码如下:其中主要是定义的数据对象和方法:
handletabsItemChange(e){ console.log(e); //获取被点击的标题索引 const {index}=e.detail; //修改激活的选中效果,修改原数组 let {tabs}=this.data; tabs.forEach((v,i)=>i===index?v.isActive=true:v.isActive=false); this.setData({ tabs }) },
数据对象
/** * 页面的初始数据 */ data: { tabs:[ { id:0, value:"综合", isActive:true }, { id:1, value:"销量", isActive:false }, { id:2, value:"价格", isActive:false } ] },
三、最终实现的效果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构