《智能前端技术与实践》——第 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 事件时, 小程序会跳转至日志页面。

相关文章
|
2月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
2月前
|
监控 前端开发 JavaScript
前端工程化和传统前端开发的区别是什么?
前端工程化相比传统前端开发,在开发模式、代码组织与管理、构建与部署流程、团队协作、性能优化以及技术选型等方面都有了显著的改进和提升,能够更好地应对现代前端应用开发的复杂性和高要求。
|
2月前
|
Cloud Native 前端开发 JavaScript
前端开发者必看:不懂云原生你就OUT了!揭秘如何用云原生技术提升项目部署与全栈能力
【10月更文挑战第23天】随着云计算的发展,云原生逐渐成为技术热点。前端开发者了解云原生有助于提升部署与运维效率、实现微服务化、掌握全栈开发能力和利用丰富技术生态。本文通过示例代码介绍云原生在前端项目中的应用,帮助开发者更好地理解其重要性。
101 0
|
2月前
|
前端开发 JavaScript API
惊呆了!这些前端技术竟然能让你的网站实现无缝滚动效果!
【10月更文挑战第30天】本文介绍了几种实现网页无缝滚动的技术,包括CSS3的`scroll-snap`属性、JavaScript的Intersection Observer API以及现代前端框架如React和Vue的动画库。通过示例代码展示了如何使用这些技术,帮助开发者轻松实现流畅的滚动效果,提升用户体验。
225 29
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
50 6
|
2月前
|
前端开发 JavaScript 搜索推荐
前端懒加载:提升页面性能的关键技术
前端懒加载是一种优化网页加载速度的技术,通过延迟加载非首屏内容,减少初始加载时间,提高用户访问体验和页面性能。
|
2月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
62 5
|
2月前
|
前端开发 JavaScript 开发者
前端小白逆袭记:从零开始,如何快速掌握前端开发精髓?
本文从一个前端小白的视角,分享了快速掌握前端开发核心技能的逆袭之路。通过学习HTML、CSS和JavaScript,逐步接触前端框架如Bootstrap、Vue.js和React,克服挑战,最终实现从入门到精通的蜕变。
34 4
|
2月前
|
移动开发 前端开发 JavaScript
惊!这些前端技术竟然能让你的网站在移动端大放异彩!
随着互联网技术的发展,移动设备成为主要的上网工具。本文介绍了几种关键的前端技术,包括响应式设计、图片优化、字体选择、HTML5和CSS3的应用、性能优化及手势操作设计,帮助开发者提升网站在移动端的显示效果和用户体验。示例代码展示了如何实现简单的双向绑定功能。
44 3
|
2月前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法