小程序组件之间传值方式 ---- 自定义组件实现一个切换菜单

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、最终我们可以得到以下菜单栏切换的效果,随着菜单栏的切换对应的内容也发生改变。

 

 

 

posted @   凌晨的粥  阅读(296)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示