微信小程序开发入门 5 组件开发与使用

微信小程序采用组件化开发,通过组件组织界面和功能逻辑,不仅能提升代码复用性,也更利于模块管理和维护。

本章将讲解:

  • 官方组件的介绍与使用
  • 自定义组件的创建与调用
  • 组件之间的数据传递与通信(按钮点击改变状态 + 通知页面)

一、官方组件的介绍与使用

微信小程序提供了丰富的官方基础组件,如:

  • 视图类view, scroll-view, swiper
  • 表单类button, input, checkbox
  • 媒体类image, video, audio

示例:使用 button 组件

<button type="primary" bindtap="sayHi">点我一下</button>
Page({
  sayHi() {
    wx.showToast({
      title: '你好!',
      icon: 'none'
    })
  }
})

二、自定义组件的创建与调用

示例:自定义彩色按钮组件

我们创建一个名为 myButton 的自定义组件,它具有以下特点:

  • 默认显示蓝色按钮,点击后变绿色
  • 支持父页面传入按钮文字
  • 点击按钮后触发自定义事件,通知父页面

1. 创建组件文件夹及结构

components/
└── myButton/
    ├── myButton.js
    ├── myButton.json
    ├── myButton.wxml
    └── myButton.wxss

2. 编写组件文件

🔹 myButton.json
{
  "component": true
}
🔹 myButton.js
Component({
  properties: {
    label: {
      type: String,
      value: '点击我'
    }
  },
  data: {
    active: false
  },
  methods: {
    onButtonClick() {
      this.setData({ active: !this.data.active }) // 切换按钮状态
      this.triggerEvent('press', { label: this.properties.label }) // 通知父页面
    }
  }
})
🔹 myButton.wxml
<view class="btn" 
      style="background-color: {{active ? '#4CAF50' : '#2196F3'}};" 
      bindtap="onButtonClick">
  <text class="btn-text">{{active ? '已点击' : label}}</text>
</view>
🔹 myButton.wxss
.btn {
  padding: 20rpx 40rpx;
  border-radius: 12rpx;
  text-align: center;
  margin: 20rpx auto;
  width: 300rpx;
  color: white;
  font-size: 32rpx;
}

3. 父页面中调用组件

🔹 注册组件:index.json
{
  "usingComponents": {
    "my-button": "/components/myButton/myButton"
  }
}
🔹 页面结构:index.wxml
<view class="container">
  <my-button label="点我试试看" bind:press="handlePress" />

  <view style="margin-top: 40rpx; font-size: 28rpx; text-align: center;">
    <text>{{message}}</text>
  </view>

  <view style="margin-top: 40rpx; font-size: 28rpx; text-align: center; color: gray;">
    当前用户:{{globalUser}}
  </view>
</view>
🔹 页面逻辑:index.js
const app = getApp()

Page({
  data: {
    message: '',
    globalUser: ''
  },

  onLoad() {
    this.setData({
      globalUser: app.globalData.userInfo?.name || '未知用户'
    })
  },

  handlePress(e) {
    wx.showToast({
      title: '你点击了按钮: ' + e.detail.label,
      icon: 'none'
    })
    this.setData({
      message: '按钮已被点击!'
    })
  }
})

三、组件之间的数据传递与通信(按钮示例)

1. 父向子传值(传入按钮文字)

在父页面中传入组件属性:

<my-button label="开始按钮"></my-button>

组件通过 properties 获取:

properties: {
  label: String
}

2. 子向父通信(通知点击事件)

在组件内部点击按钮时触发事件:

this.triggerEvent('press', { label: this.properties.label })

父页面中绑定事件:

<my-button label="点我" bind:press="handlePress"></my-button>

父页面定义响应函数:

handlePress(e) {
  wx.showToast({
    title: '你点击了按钮: ' + e.detail.label
  })
}

3. 使用全局数据(globalData)

app.js 中定义全局数据:

App({
  globalData: {
    userInfo: {
      name: 'Tom'
    }
  }
})

在页面中访问:

onLoad() {
  this.setData({
    globalUser: app.globalData.userInfo?.name
  })
}

在这里插入图片描述


小结

本章通过一个按钮状态切换组件的完整案例,讲解了:

  • 官方组件与自定义组件的区别
  • 如何封装可复用的组件
  • 如何实现父传子、子传父通信
  • 如何在组件与页面中共享全局数据

练习题

  1. 修改按钮组件,支持自定义颜色(通过属性传入);
  2. 添加点击次数统计,父页面记录总点击次数;
  3. 多个按钮共用同一个组件,点击不同按钮显示不同消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山海青风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值