微信小程序开发入门

微信小程序开发入门:2.3 逻辑层(App Service)

2018-04-19  本文已影响0人  wangbu2

小程序开发框架的逻辑层由 JavaScript 编写。

逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。

在 JavaScript 的基础上,我们做了一些修改,以方便地开发小程序。

2.3.1 注册小程序 App

2.3.1.1 App()

App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。

object参数说明:

App() 的object 参数说明

前台、后台定义: 当用户点击右上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。

示例代码:

App({
  onLaunch: function(options) {
    // Do something initial when launch.
  },
  onShow: function(options) {
      // Do something when show.
  },
  onHide: function() {
      // Do something when hide.
  },
  onError: function(msg) {
    console.log(msg)
  },
  globalData: 'I am global data'
})

2.3.1.2 onLaunch,onShow 参数

2.3.1.3 onPageNotFound

当要打开的页面并不存在时,会回调这个监听器,并带上以下信息:

开发者可以在 onPageNotFound 回调中进行重定向处理,但必须在回调中同步处理,异步处理(例如 setTimeout 异步执行)无效。

示例代码:

App({
  onPageNotFound(res) {
    wx.redirectTo({
      url: 'pages/...'
    })
  }
})

2.3.1.4 getApp()

全局的 getApp() 函数可以用来获取到小程序实例。

// other.js
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data

注意:

2.3.2 场景值

当前支持的场景值请参考链接

可以在 App 的 onlaunch 和 onshow 中获取上述场景值,部分场景值下还可以获取来源应用、公众号或小程序的appId。

2.3.3 注册页面 Page

Page() 函数用来注册一个页面。接受一个 object 参数,其指定页面的初始数据、生命周期函数、事件处理函数等。

object 参数说明,请参考链接

2.3.3.1 初始化数据

初始化数据将作为页面的第一次渲染。data 将会以 JSON 的形式由逻辑层传至渲染层,所以其数据必须是可以转成 JSON 的格式:字符串,数字,布尔值,对象,数组。

2.3.3.2 生命周期函数

onLoad 参数

2.3.3.3 页面相关事件处理函数

2.3.3.4 事件处理函数

除了初始化数据和生命周期函数,Page 中还可以定义一些特殊的函数:事件处理函数。在渲染层可以在组件中加入事件绑定(即在page.wxml 中调用page.js 中定义的时间处理函数),当达到触发事件时,就会执行 Page 中定义的事件处理函数。

2.3.3.5 Page.prototype.route

route 字段可以获取到当前页面的路径。

2.3.3.6 Page.prototype.setData()

setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。操作都是局限于本页面(page)。

注意:

1. 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
2. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
3. 请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。

2.3.4 页面路由

在小程序中所有页面的路由全部由框架进行管理。

2.3.4.1 页面栈

框架以栈的形式维护了当前的所有页面。

2.3.4.2 getCurrentPages()

getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

Tip:不要尝试修改页面栈,会导致路由以及页面状态错误。

2.3.4.3 路由方式

对于路由的触发方式以及页面生命周期函数如下:

Tips:

2.3.5 模块化

2.3.5.1 文件作用域

在 JavaScript 文件中声明的变量和函数只在该文件中有效;不同的文件中可以声明相同名字的变量和函数,不会互相影响。

通过全局函数 getApp() 可以获取全局的应用实例。

2.3.5.2 模块化

可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块。模块只有通过 module.exports 或者 exports 才能对外暴露接口。

需要注意的是:

// common.js
function sayHello(name) {
  console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
  console.log(`Goodbye ${name} !`)
}

module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye

​在需要使用这些模块的文件中,使用 require(path) 将公共代码引入

var common = require('common.js')
Page({
  helloMINA: function() {
    common.sayHello('MINA')
  },
  goodbyeMINA: function() {
    common.sayGoodbye('MINA')
  }
})

Tip: require 暂时不支持绝对路径

2.3.6 API

小程序开发框架提供丰富的微信原生 API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等。

详细介绍请参考 API 文档


参考资料:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/

上一篇 下一篇

猜你喜欢

热点阅读