《智能前端技术与实践》——第 2 章 前端开发基础 ——2.7 微信小程序开发——2.7.4 逻辑层文件

简介: 《智能前端技术与实践》——第 2 章 前端开发基础 ——2.7 微信小程序开发——2.7.4 逻辑层文件

2.7.4 逻辑层文件


在微信小程序中,逻辑层对从后台接收到的数据进行加工处理,并将其发送给视图层, 与此同时还要接收视图层的事件反馈。但小程序中的 JavaScript 与原生 JavaScript 并不完全 一样,最显著的一点就是由于小程序框架的逻辑层并非运行在浏览器中,因此 JavaScript 在 Web 中的一些功能(如 window、document 等)无法使用。另外,小程序还依托微信强大的 生态能力,在原生 JavaScript 的基础上做了一些方便小程序开发者的改进,主要体现在以下 几点。


• 增加 App()和 Page()方法,进行程序注册和页面注册。

• 增加 getApp()和 getCurrentPages()方法,分别用来获取 App 实例和当前页面栈。

• 提供丰富的 API,如微信用户数据、扫一扫、微信支付等。

• 提供模块化能力,每个页面均有其独立的作用域。


每个小程序都需要在 app.js 中通过调用 App()方法注册小程序实例,用来绑定生命周期 函数、错误监听函数和页面不存在监听函数等函数,该方法必须调用且只能调用一次,否 则会出现无法预期的后果。对于 20210116_demo 项目,app.js 中的默认代码如代码清单 2-59 所示。


代码清单 2-59


// app.jsApp({
onLaunch() {
// 展示本地存储能力constlogs=wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录wx.login({
success: res=> {
// 发送 res.code 到后台换取 openId、sessionKey 与 unionId      }
    })
// 获取用户信息wx.getSetting({
success: res=> {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹出对话框wx.getUserInfo({
success: res=> {
// 可以将 res 发送给后台解码出 unionIdthis.globalData.userInfo=res.userInfo// 因为 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回// 所以此处加入 callback 以防止这种情况if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  },
globalData: {
userInfo: null  }
})


代码清单 2-56 在 App()函数内部定义了 onLaunch()函数。该函数实现了两个功能。第一个功能 是通过wx.getStorageSync()函数获取每次小程序启动时的13 位时间戳,并通过wx.setStorageSync()函 数将该时间戳存储在日志(log)中,然后在 logs.js 文件中,通过引用 utils 文件夹中的 util.js 文件将对应的时间戳转换成标准时间格式,最后将其更新到 logs.wxml 页面。第二个功能是在 用户已经授权(即 scope.userInfo 值为 true)的情况下,获取用户信息(包括微信图像的网络地 址、所在城市/国家、性别、语言、昵称、省份)


接下来,我们通过 Page()来完成页面的注册。小程序中的每个页面都需要在页面对应的 js 文件中通过 Page 构造器进行注册,并指定页面的初始数据、生命周期函数回调、事件处理函 数等。index.js 中的默认代码如代码清单 2-60 所示。


代码清单 2-60


// index.js// 获取应用实例constapp=getApp()
Page({
data: {
motto: 'Hello World',
userInfo: {},
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
// 事件处理函数bindViewTap() {
wx.navigateTo({
url: '../logs/logs'    })
  },
onLoad() {
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true      })
    } elseif (this.data.canIUse) {
// 因为 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回// 所以此处加入 callback 以防止这种情况app.userInfoReadyCallback=res=> {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true        })
      }
    } else {
// 在没有 open-type=getUserInfo 版本时的兼容处理wx.getUserInfo({
success: res=> {
app.globalData.userInfo=res.userInfothis.setData({
userInfo: res.userInfo,
hasUserInfo: true          })
        }
      })
    }
  },
getUserInfo(e) {
console.log(e)
app.globalData.userInfo=e.detail.userInfothis.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true    })
  }
})


代码清单 2-60 首先通过 getApp()方法获取全局唯一的 App 实例,以方便我们拿到 App 上 的 userInfo 数据;然后在 Page()函数内部,分别定义了初始数据(data)、生命周期函数 (onLoad())、事件处理函数。当用户触发组件的 getUserInfo 事件时,小程序会将用户 图像、用户昵称通过 setData()方法更新到页面中;当触发组件的 bindViewTap 事件时, 小程序会跳转至日志页面。

相关文章
|
6月前
|
人工智能 小程序 前端开发
一个小程序轻量AR体感游戏,开发实现解决方案
针对青少年运动兴趣不足问题,AR体感游戏凭借沉浸式互动体验脱颖而出。结合小程序“AI运动识别”插件与WebGL渲染技术,可实现无需外设的轻量化AR健身游戏,如跳糕、切水果等,兼具趣味性与锻炼效果,适用于儿童健身及职工团建,即开即玩,低门槛高参与。
|
6月前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?哪个好
小程序的开发方式丰富多元,开发团队可根据自身的技术背景、项目具体需求以及资源状况,灵活挑选最为适宜的开发路径。以下将详细介绍几种主流的小程序开发方式。
585 1
|
6月前
|
运维 小程序 数据可视化
小程序开发平台有哪些?SaaS小程序制作平台哪个好
小程序开发模式详解:自主开发、SaaS小程序制作平台与外包全对比 选择合适的小程序开发模式,是项目成功的基石。这三种模式在成本、周期、控制力和灵活性上各有千秋,适用于不同阶段和不同类型的企业。下面我们将逐一深入剖析。
508 8
|
6月前
|
移动开发 小程序 前端开发
小程序快速开发平台有哪些?
小程序开发并非“一刀切”,需结合技术储备、资金预算、时间规划及功能需求等多维度因素综合考量。以下为您详细拆解五种主流开发方案及其适用场景,助您精准匹配开发路径。
369 3
|
7月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
6月前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?小程序开发制作软件推荐
小程序开发方案全解析:5种主流方式与选择指南 小程序开发需根据技术能力、预算、时间及功能需求综合决策。以下为5种主流开发方案及适用场景分析:
26117 0
|
8月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
425 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
11月前
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
2093 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡