一、小程序前端的核心差异
与 Web 前端(HTML+CSS+JS)相比,小程序有 3 个核心不同:
- 标签不同:HTML 的
div/p/span→ 小程序的view/text,button等组件是微信封装好的; - 单位不同:Web 的
px→ 小程序的rpx(自适应不同屏幕,1rpx = 屏幕宽度 / 750); - 运行环境不同:小程序运行在微信内置的渲染引擎,而非浏览器,所以没有
window/document等 DOM API,而是用微信提供的wx.xxxAPI(如wx.showToast)。
二、前期准备:微信开发者工具搭建
小程序前端开发最核心的工具是微信开发者工具。步骤如下:
- 下载安装:访问微信公众平台开发者工具页面,下载对应系统(Windows/Mac)的版本安装。
- 新建测试项目:打开开发者工具,登录微信账号,点击「+ 新建项目」:
- 项目名称:自定义(例如 mini-frontend-demo);
- 项目路径:选择本地空文件夹;
- AppID:新手选择「测试号」(无需审核即可本地开发);
- 其他选项:取消勾选「云服务」,点击「创建」。
- 熟悉工具界面:
- 模拟器:实时显示小程序运行效果;
- 编辑器:编写代码的地方;
- 调试器:类似浏览器控制台,用于打印日志和排查错误。
三、核心知识点:小程序前端的目录结构
默认项目目录包含全局文件和页面文件,核心文件如下:
- index.wxml:页面结构,相当于 Web 的 HTML,但只能用小程序官方组件(如 view, text, button);
- index.wxss:页面样式,相当于 Web 的 CSS,单位用 rpx 自动适配屏幕;
- index.js:页面逻辑,用原生 JS 编写,包裹在
Page({})中,使用wx.xxxAPI。
四、实操:写第一个可交互页面
目标:显示初始文本,有一个按钮修改文本,一个输入框获取内容,点击按钮时一并显示。
1. 编写页面结构(index.wxml)
替换 pages/index/index.wxml 内容:
<!-- 容器视图,类似 Web 的 div -->
<view>
<!-- 文本组件,{{msg}} 绑定 index.js 里的 data.msg -->
<text>{{msg}}</text>
<!-- 输入框组件,bindinput 绑定输入事件 -->
<input placeholder="请输入内容(可选)" bindinput="inputHandler" value="{{inputValue}}" />
<!-- 按钮组件,bindtap 绑定点击事件 -->
<button bindtap="clickHandler">点击修改文本</button>
</view>
核心是数据绑定,使用 {{变量名}} 将 js 数据渲染到页面。
2. 编写页面样式(index.wxss)
替换 pages/index/index.wxss 内容:
/* 页面容器 */
.page-container {
padding: 30rpx;
display: flex;
flex-direction: column;
align-items: center;
}
/* 文本样式 */
.content-text {
font-size: 36rpx;
color: #333;
margin-bottom: 40rpx;
}
/* 按钮样式 */
.operate-btn {
width: 600rpx;
height: 80rpx;
line-height: 50rpx;
background-color: #07c160;
color: #fff;
border-radius: 40rpx;
margin-bottom: 30rpx;
}
/* 输入框样式 */
.input-box {
width: 600rpx;
height: 80rpx;
border: 1rpx solid #eee;
padding: 0 20rpx;
border-radius: 40rpx;
font-size: 32rpx;
}
重点记住不用 px 用 rpx,且小程序样式不支持 * 通配符。
3. 编写页面逻辑(index.js)
替换 pages/index/index.js 内容:
// Page() 是小程序页面的核心函数
Page({
// 1. 页面初始数据
data: {
msg: "Hello 微信小程序!",
inputValue: ""
},
// 2. 按钮点击事件处理函数
clickHandler() {
wx.showToast({
title: '点击成功!',
icon: 'success',
duration: 1500
});
// 必须用 this.setData() 触发页面更新
this.setData({
msg: "你点击了按钮!输入的内容是:" + this.data.inputValue
});
},
// 3. 输入框输入事件处理函数
inputHandler(e) {
this.setData({
inputValue: e.detail.value
});
},
// 4. 页面生命周期函数
onLoad(options) {
console.log("首页加载完成!");
}
});
重点:修改页面数据必须用 this.setData();事件绑定函数名需与 wxml 中 bindtap 值完全一致(大小写敏感)。
五、运行测试
点击开发者工具右上角的运行按钮,模拟器显示页面效果:
- 初始状态:显示「Hello 微信小程序!」,下方是输入框和绿色按钮;
- 输入测试:在输入框输入内容;
- 点击按钮:弹出提示,页面上文本变为「你点击了按钮!输入的内容是:...」;
- 调试日志:打开调试器 Console 面板查看日志。
六、新手常见问题与解决方法
| 问题现象 | 问题原因 | 解决方法 |
|---|---|---|
| 页面白屏,报「page not found」 | 新增页面后未在 app.json 注册 | 在 app.json 的 pages 数组添加页面路径 |
| 点击按钮没反应 | 事件绑定函数名写错或 bindtap 拼写错误 | 检查 wxml 里的 bindtap 值和 js 函数名是否一致 |
| 修改 data 后页面不更新 | 直接修改 this.data.xxx | 必须用 this.setData() 修改数据 |
| 样式不生效 | 使用了 * 通配符或 class 名不一致 | 去掉 * 通配符,检查选择器和 class 名 |
| 输入框无法获取内容 | 未绑定 bindinput 或未用 e.detail.value | 添加 bindinput 事件,用 e.detail.value 取值 |
七、入门总结
小程序前端核心:wxml(结构)+ wxss(样式)+ js(逻辑)。核心技能包括数据绑定({{变量名}})、事件绑定(bindtap)、setData 修改数据。新手避坑点:不用 HTML 标签、不用 px 单位、修改数据用 setData、事件名大小写一致。


