微信小程序的逻辑层(App Service)概述
微信小程序的框架分为视图层(View)和逻辑层(App Service)两部分。其中,逻辑层负责处理业务逻辑、数据处理和事件响应,是小程序的核心“大脑”。
- 逻辑层的作用:
- 使用 JavaScript 编写,处理数据后通过
setData发送给视图层更新界面。 - 接收视图层的事件反馈(如用户点击、输入等)。
- 所有代码最终打包成一个 JavaScript 文件,在小程序启动时运行,直至销毁(类似 ServiceWorker)。
- 与普通 JavaScript 的区别:
- 不支持浏览器对象(如
window、document)。 - 增加了小程序专有功能:
App()和Page()方法:用于注册小程序和页面。getApp()和getCurrentPages():获取全局实例和页面栈。- 丰富的微信 API(如
wx.request、wx.login、wx.pay等)。
1. 注册小程序(App)
在 app.js 中使用 App() 注册,整个小程序只有一个 App 实例,全页面共享。
// app.js
App({
onLaunch(options) {
// 小程序启动时触发(只触发一次)
console.log('小程序启动', options);
},
onShow(options) {
// 从后台进入前台时触发
},
onHide() {
// 从前台进入后台时触发
},
globalData: {
// 全局数据,所有页面可通过 getApp() 访问
userInfo: null
}
});
获取全局实例:
const app = getApp();
console.log(app.globalData);
2. 注册页面(Page)
每个页面在自己的 .js 文件中使用 Page() 注册。
// pages/index/index.js
Page({
data: {
// 页面初始数据(会绑定到视图层)
message: 'Hello World',
list: [1, 2, 3]
},
onLoad(options) {
// 页面加载时触发
},
onReady() {
// 页面初次渲染完成
},
onShow() {
// 页面显示
},
onHide() {
// 页面隐藏
},
onUnload() {
// 页面卸载
},
handleTap(e) {
// 事件处理函数(视图层绑定 bindtap="handleTap")
this.setData({
message: 'Clicked!'
});
}
});
- 数据更新:使用
this.setData({ key: value })更新数据,视图层自动刷新。
3. 业务逻辑处理示例
- 网络请求(常见业务逻辑):
wx.request({
url: 'https://api.example.com/data',
success(res) {
this.setData({
list: res.data
});
}
});
- 事件处理:视图层通过
bindtap、bindinput等绑定事件,逻辑层处理用户交互。 - 模块化:可以将公共逻辑导出为模块。
// utils/util.js
module.exports = {
formatTime: function(time) { ... }
};
// 在页面中使用
const util = require('../../utils/util.js');
4. 注意事项
- 逻辑层和视图层通信通过微信 Native 中转(双线程架构),确保性能。
- 避免在逻辑层直接操作 DOM(不支持)。
- 复杂业务建议拆分成组件或云函数(云开发)处理。
如果你的问题是关于微信小程序中具体某个部分的业务逻辑(如登录、支付、列表渲染等),或者有代码片段需要解释/优化,请提供更多细节,我可以给出针对性的示例!