当前位置: 首页 > news >正文

组件化思维(下):表单与交互组件,倾听用户的心声

组件化思维(下):表单与交互组件,倾听用户的心声

所属专栏:《微信小程序实战笔记30讲》
作者:码力无边

前言

在上一讲中,我们学习了如何使用视图和基础内容组件来“展示”信息给用户。这解决了小程序“说”的问题。但一个好的应用不仅要会说,更要会“听”。它需要能够接收用户的输入、理解用户的选择,从而做出相应的反馈。

今天,我们将聚焦于小程序中负责“倾听”的组件——表单与交互组件。这些组件是连接用户与应用的桥梁,是构建登录注册、信息提交、设置选项等核心功能的基石。

学完本讲,你将掌握如何通过<input>, <form>, <picker>, <button>等组件,打造出功能完整的数据录入和交互界面,让你的小程序真正具备与用户双向沟通的能力。

一、用户输入的窗口:<input><textarea>

<input><textarea> 是我们获取用户文本输入最常用的两个组件。

1. <input>:单行输入框

用于输入单行文本,如用户名、密码、手机号等。

核心属性:

  • value: 输入框的当前内容。
  • type: 输入框类型。常用的有 text(文本), number(数字), idcard(身份证), digit(带小数点的数字), password(密码)。指定类型可以唤起对应的手机键盘,提升体验。
  • placeholder: 输入框为空时的占位文本。
  • maxlength: 最大输入长度。
  • bindinput: 输入框内容改变时触发的事件。这是获取用户实时输入内容的关键。

动手实践 - 实时获取输入:
WXML:

<view class="input-wrap"><text>用户名:</text><input class="input-item" placeholder="请输入用户名" bindinput="handleUsernameInput"/>
</view>
<view>你输入的内容是:{{username}}</view>

JS:

Page({data: {username: ''},handleUsernameInput: function(event) {// event.detail.value 能获取到输入框最新的内容console.log(event.detail.value); this.setData({username: event.detail.value});}
})

通过bindinput事件,我们可以实时捕获用户的每一次按键,并更新到data中,实现了数据的双向绑定。

2. <textarea>:多行文本域

用于输入大段文本,如用户反馈、文章评论等。它的属性与<input>类似,但多了auto-height等特性。

核心属性:

  • auto-height: 自动增高,当输入内容超过一行时,文本域会自动撑高。
  • show-confirm-bar: 是否显示键盘上方带有“完成”按钮的工具栏。

示例:

<textarea placeholder="请输入您的宝贵意见..." maxlength="200"auto-height
/>

二、数据的集结号:<form> 组件

当页面上有多个输入项(如注册页面)时,如果一个个去绑定bindinput会很繁琐。<form>组件提供了一种更高效的方式来一次性收集表单内所有输入组件的数据

<form>通过包裹<input>, <switch>, <picker>等组件,并在点击特定按钮(form-type="submit")时,通过bindsubmit事件统一提交。

关键点:

  1. 表单内的输入组件必须有name属性,作为提交时数据的键名。
  2. 触发提交的按钮,必须设置form-type="submit"

动手实践 - 实现一个登录表单:
WXML:

<form bindsubmit="handleFormSubmit"><view class="form-item"><text>账号:</text><input name="account" placeholder="请输入账号"/></view><view class="form-item"><text>密码:</text><input name="password" type="password" placeholder="请输入密码"/></view><button form-type="submit" type="primary">登录</button><button form-type="reset">重置</button>
</form>

JS:

Page({handleFormSubmit: function(event) {// event.detail.value 就是一个包含了所有表单项数据的对象// key 是组件的 name,value 是用户输入的值const formData = event.detail.value;console.log('收到的表单数据:', formData);if (!formData.account || !formData.password) {wx.showToast({title: '账号或密码不能为空',icon: 'none'});return;}// 在这里可以执行登录的网络请求wx.showLoading({ title: '登录中...' });// ... 模拟登录 ...setTimeout(() => {wx.hideLoading();wx.showToast({ title: '登录成功' });}, 1500);}
})

使用<form>大大简化了数据收集的逻辑,让代码更清晰、更易于维护。

三、选择的艺术:<picker>, <radio>, <checkbox>

除了文本输入,让用户做选择也是常见的交互。

1. <picker>:从底部弹起的滚动选择器

<picker>非常适合从一组固定的选项中进行单项选择,如选择日期、时间、地区、或者自定义的列表。

核心属性:

  • mode: 选择器类型。常用值:
    • selector: 普通选择器(从数组中选)。
    • multiSelector: 多列选择器。
    • time: 时间选择器。
    • date: 日期选择器。
    • region: 省市区选择器。
  • range: 当mode="selector"时,提供选择的数组。
  • bindchange: 值改变时触发的事件

动手实践 - 选择学历:
WXML:

<picker mode="selector" range="{{educationArray}}" bindchange="handleEducationChange"
><view class="picker-display">当前选择:{{educationArray[selectedIndex]}}</view>
</picker>

JS:

Page({data: {educationArray: ['高中', '大专', '本科', '硕士', '博士'],selectedIndex: 2 // 默认选中'本科'},handleEducationChange: function(event) {// event.detail.value 是选中项的索引(从0开始)console.log('选中的索引是:', event.detail.value);this.setData({selectedIndex: event.detail.value});}
})
2. <radio-group><radio>:单选按钮

用于在一组选项中进行单选。

WXML:

<radio-group bindchange="handleGenderChange"><radio value="male" checked></radio><radio value="female" style="margin-left: 20rpx;"></radio>
</radio-group>
<view>你的选择是:{{gender}}</view>

JS:

Page({data: {gender: 'male' // 默认值},handleGenderChange: function(event) {// event.detail.value 是被选中的 radio 的 value 值this.setData({gender: event.detail.value});}
})
3. <checkbox-group><checkbox>:多选框

用于在一组选项中进行多项选择。

WXML:

<checkbox-group bindchange="handleHobbyChange"><checkbox value="coding">编程</checkbox><checkbox value="reading" checked>阅读</checkbox><checkbox value="sports">运动</checkbox>
</checkbox-group>
<view>你的爱好是:{{hobbies.join(', ')}}</view>

JS:

Page({data: {hobbies: ['reading'] // 默认值},handleHobbyChange: function(event) {// event.detail.value 是一个包含了所有被选中项 value 的数组this.setData({hobbies: event.detail.value});}
})

四、不仅仅是按钮:<button> 的更多潜能

<button>除了触发普通点击事件和表单提交,它还是小程序开放能力的“钥匙”。通过设置open-type属性,它可以调用微信提供的各种原生功能。

  • open-type="contact": 打开客服会话。
  • open-type="share": 触发用户分享。
  • open-type="getUserInfo": 获取用户信息(已逐渐废弃,推荐使用wx.getUserProfile)。
  • open-type="getPhoneNumber": 获取用户手机号(需企业认证)。

这些开放能力我们将在后续的实战篇中详细讲解。

结语

今天,我们系统地学习了小程序中负责“倾听”的表单与交互组件。我们掌握了:

  • 使用<input><textarea>获取用户的文本输入。
  • 利用<form>组件高效地组织和提交表单数据。
  • 通过<picker>, <radio>, <checkbox>等组件让用户做出选择。
  • 了解了<button>组件背后强大的开放能力。

至此,你的小程序已经同时具备了“说”和“听”的能力,可以构建出绝大多数需要数据录入和用户选择的交互界面了。

但是,用户的操作(比如点击按钮)是如何被小程序精确捕捉并传递给逻辑层的呢?这一切的背后,都依赖于小程序的事件系统。下一讲,我们将深入探究事件的冒泡机制、bindcatch的区别,以及如何在事件中传递自定义参数,让你对小程序的交互逻辑有更深层次的理解。

我们下篇见!

http://www.dtcms.com/a/403388.html

相关文章:

  • 机器学习——逻辑回归详解
  • wordpress做英文站最打动人心的广告语
  • 支持向量机深度解析:从数学原理到工程实践的完整指南——流式在线学习、增量 SVM 与万亿参数时代的挑战
  • 时间复杂度与空间复杂度系统梳理与实战
  • 三轴正交磁力矩器输出力矩计算原理及实现
  • 小组网站建设方案书网站seo优化关键词快速排名上首页
  • 淘宝cms建站wordpress调取某页面
  • STM32的HAL库驱动ADS124S08进行PT100温度采集
  • 软件报错处理合集,大部分情况需要下载Webview2、.NET4.8、获取C盘管理员权限等
  • Jakarta EE 实验 — Web 聊天室(过滤器、监听器版)进阶
  • 腾讯风铃怎么做网站wordpress添加百度统计代码
  • JMeter的取样器
  • LSTM自然语言处理情感分析项目(一)构建词汇表
  • 门户网站建设ppt方案企业网站建设教程pdf
  • 搭建网站的企业淘客帝国 wordpress
  • HarmonyOS 5 网络编程与数据存储实战:从RESTful API到本地持久化
  • Vue.js 生命周期详解
  • 云手机远程控制的作用
  • Vue3》》vite》》 vue-router 和文件路由
  • 个人网站搭建详细步骤线上做汉语教师网站
  • GUIAgent:大模型驱动的浏览器自动化助手
  • Ubuntu gdb attach 权限问题
  • 做设计一般用的素材网站是什么asp 做网站的好处
  • 破解php网站后台密码怎样在wordpress里面调出菜单
  • 构建AI智能体:四十三、智能数据分析机器人:基于Qwen-Agent与Text2SQL的门票分析方案
  • CSS模板语法修复总结
  • 班级网站界面东平网站建设
  • Linux开发工具(编辑器gcc/g++,make/Makefile,gdb)
  • shell编程:sed - 流编辑器(4)
  • 没有网站怎么做推广丹阳网站建设策划