小程序基础页面配置以及生命周期

| 注册程序 App(Object)

App() 函数用来注册一个小程序。接受一个 Object 参数,其指定小程序的生命周期回调等。 App() 必须在 app.js 中调用,必须调用且只能调用一次。

  • onLaunch:监听小程序初始化;小程序初始化完成时(全局只触发一次)
  • onShow:监听小程序显示;小程序启动,或从后台进入前台显示时触发
  • onHide:监听小程序隐藏;小程序从前台进入后台时触发
  • onError:错误监听函数;小程序发生脚本错误,或者 api 调用失败时触发,会带上错误信息
  • onPageNotFound:页面不存在监听函数
  • 自定义:任意数据,用 this 访问;(全局变量)

前台、后台定义: 当用户点击左上角关闭,或者按了设备 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'
})

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

Object 参数说明:

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

注意:不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例。

| 注册页面 Page(Object)

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

  • data:页面的初始数据
  • onLoad:生命周期回调—监听页面加载
  • onShow:生命周期回调—监听页面显示
  • onReady:生命周期回调—监听页面初次渲染完成
  • onHide:生命周期回调—监听页面隐藏
  • onUnload:生命周期回调—监听页面卸载
  • onPullDownRefresh:监听用户下拉动作
  • onReachBottom:页面上拉触底事件的处理函数
  • onShareAppMessage:用户点击右上角转发
  • onPageScroll:页面滚动触发事件的处理函数
  • onTabItemTap:当前是 tab 页时,点击 tab 时触发
  • 自定义:任意数据,在页面的函数中用 this 可以访问
//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // 页面加载时触发,一个页面只会调用一次
    // 可以在 onLoad 的参数中获取打开当前页面路径中的参数。
  },
  onReady: function() {
    // -一个页面只会调用一次
    // 代表页面已经准备妥当,可以和视图层进行交互。
  },
  onShow: function() {
    // -页面显示/切入前台时触发
  },
  onHide: function() {
    // 页面隐藏/切入后台时触发。 如 navigateTo 或底部 tab 切换到其他页面,小程序切入后台等。
  },
  onUnload: function() {
    // 页面卸载时触发。如redirectTo或navigateBack到其他页面时。//////////////////////
  },
  onPullDownRefresh: function() {
    // 需要在app.json的window选项中或页面配置中开启enablePullDownRefresh。
    // 可通过wx.startPullDownRefresh触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。
    // 当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新。
  },
  onReachBottom: function() {
    // 可以在app.json的window选项中或页面配置中设置触发距离onReachBottomDistance。
    // 在触发距离内滑动期间,本事件只会被触发一次。
  },
  onShareAppMessage: function (Object) {
    // from 转发事件来源 button:页面内转发按钮; menu:右上角转发菜单
    // target 如果 from 值是 button,则 target 是触发这次转发事件的 button,否则为 undefined
    // webViewUrl 页面中包含<web-view>组件时,  返回当前<web-view>的url
    // 此事件需要 return 一个 Object,用于自定义转发内容,返回内容:title/path/imageUrl
    // if (res.from === 'button') {
    //   // 来自页面内转发按钮
    //   console.log(res.target)
    // }
    // return {
    //   title: '自定义转发标题',
    //   path: '/page/user?id=123'
    // }
  },
  onPageScroll: function(Object) {
    // scrollTop	Number	页面在垂直方向已滚动的距离(单位px)
  },
  onTabItemTap(item) {
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    }, function() {
      // this is setData callback
    })
  },
  customData: {
    hi: 'MINA'
  }
})

| 配置文件 app.json

{
  // 页面文件的路径
  "pages": [
    "pages/index/index"
  ],
  // 窗口表现
  "window": {
    "navigationBarTitleText": "Demo"
  },
  // 设置多 tab
  "tabBar": {
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页"
    }, {
      "pagePath": "pages/logs/logs",
      "text": "日志"
    }]
  }
}

👉 更多全局配置

| 更多说明

  • 开发环境下不校验合法域名: 微信开发者工具——详情——勾选”不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书”

  • 获取转发信息:app.js onShow 中获取信息赋值给全局变量,页面中获取全局变量。前提是页面必须在 pages 目录下

小程序文档

微信小程序之页面路由(九)