小程序自定义组件

小程序自定义组件

一、 父组件中的相关代码如下

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
      }
    ]
  },
复制代码

 三、最终实现的效果如下:

  

 

posted @   锦大大的博客呀!  阅读(70)  评论(0编辑  收藏  举报
编辑推荐:
· 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语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示