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

相关文章
|
11天前
|
缓存 监控 前端开发
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
【4月更文挑战第30天】本文探讨了Flutter应用启动优化策略,包括理解启动过程、资源加载优化、减少初始化工作、界面布局简化、异步初始化、预加载关键数据、性能监控分析以及案例和未来优化方向。通过这些方法,可以缩短启动时间,提升用户体验。使用Flutter DevTools等工具可助于识别和解决性能瓶颈,实现持续优化。
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
|
1天前
|
Web App开发 数据采集 移动开发
开发uniapp过程中对app、微信小程序与h5的webview调试
开发uniapp过程中对app、微信小程序与h5的webview调试
|
11天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
11天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
11天前
|
前端开发 JavaScript UED
【专栏:HTML 与 CSS 前端技术趋势篇】Web 性能优化:CSS 与 HTML 的未来趋势
【4月更文挑战第30天】本文探讨了CSS和HTML在Web性能优化中的关键作用,包括样式表压缩、选择器优化、DOM操作减少等策略。随着未来趋势发展,CSS模块系统、自定义属性和响应式设计将得到强化,HTML新特性也将支持复杂组件构建。同时,应对浏览器兼容性、代码复杂度和性能功能平衡的挑战是优化过程中的重要任务。通过案例分析和持续创新,我们可以提升Web应用性能,创造更好的用户体验。
|
11天前
|
移动开发 前端开发 UED
【专栏:HTML与CSS前端技术趋势篇】渐进式增强与优雅降级在前端开发中的实践
【4月更文挑战第30天】前端开发中的渐进式增强和优雅降级是确保跨浏览器、跨设备良好用户体验的关键策略。渐进式增强是从基础功能开始,逐步增加高级特性,保证所有用户能访问基本内容;而优雅降级则是从完整版本出发,向下兼容,确保低版本浏览器仍能使用基本功能。实践中,遵循HTML5/CSS3规范,使用流式布局和响应式设计,检测浏览器特性,并提供备选方案,都是实现这两种策略的有效方法。选择合适策略优化网站,提升用户体验。
|
11天前
|
前端开发 开发者 UED
【专栏:HTML与CSS前端技术趋势篇】网页设计中的CSS Grid与Flexbox之争
【4月更文挑战第30天】本文对比了CSS Grid和Flexbox两种布局工具。Flexbox擅长一维布局,简单易用,适合导航栏和列表;CSS Grid则适用于二维布局,能创建复杂结构,适用于整个页面布局。两者各有优势,在响应式设计中都占有一席之地。随着Web标准发展,它们的结合使用将成为趋势,开发者需掌握两者以应对多样化需求。
|
11天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
11天前
|
前端开发 JavaScript 安全
【TypeScript技术专栏】TypeScript在微前端架构中的应用
【4月更文挑战第30天】微前端架构通过拆分应用提升开发效率和降低维护成本,TypeScript作为静态类型语言,以其类型安全、代码智能提示和重构支持强化这一架构。在实践中,TypeScript定义公共接口确保跨微前端通信一致性,用于编写微前端以保证代码质量,且能无缝集成到构建流程中。在微前端架构中,TypeScript是保障正确性和可维护性的有力工具。
|
11天前
|
缓存 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 前端路由实现原理
【4月更文挑战第30天】本文探讨了JavaScript前端路由在SPA中的重要性,阐述了其基本原理和实现方式,包括Hash路由和History路由。前端路由通过监听URL变化、匹配规则来动态切换内容,提升用户体验和交互性。同时,文章也提到了面临的SEO和页面缓存挑战,并通过电商应用案例分析实际应用。理解并掌握前端路由能助开发者打造更流畅的单页应用。