简析微信小程序注册程序和函数

一、微信小程序注册程序

App.js文件不仅可以定义全局函数和数据,还可以注册一个程序。在App()函数里面可以完成小程序的注册以及指定其生命周期函数。

下表为生命周期函数的定义

属性类型描述触发时机
onLaunchFunction生命周期函数--监听小程序初始化当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
onShowFunction生命周期函数--监听小程序显示当小程序启动,或从后台进入前台显示,会触发 onShow
onHideFunction生命周期函数--监听小程序隐藏当小程序从前台进入后台,会触发 onHide
onErrorFunction错误监听函数当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
其他Any 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问

示例代码如下

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'
})

如果想在页面里调用的App.js里的数据,只需要在页面里的js文件里加上

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

注意:

  • App() 必须在 app.js 中注册,且不能注册多个。
  • 不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例。
  • 不要在 onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成。
  • 通过 getApp() 获取实例之后,不要私自调用生命周期函数。

二、微信小程序注册页面的使用

在每个页面的文件夹里面,都有这个页面对应的js文件。在这个文件里的Page()函数用于注册一个页面。接受一个object参数,其指定页面的初始数据、生命周期函数、事件处理函数等页面的所有业务逻辑处理都在这个js文件里面。

object参数的说明如下:

属性类型描述
dataObject页面的初始数据
onLoadFunction生命周期函数--监听页面加载
onReadyFunction生命周期函数--监听页面初次渲染完成
onShowFunction生命周期函数--监听页面显示
onHideFunction生命周期函数--监听页面隐藏
onUnloadFunction生命周期函数--监听页面卸载
onPullDownRefreshFunction页面相关事件处理函数--监听用户下拉动作
onReachBottomFunction页面上拉触底事件的处理函数
onShareAppMessageFunction用户点击右上角转发
onPageScrollFunction页面滚动触发事件的处理函数
onTabItemTapFunction当前是 tab 页时,点击 tab 时触发
其他Any开发者可以添加任意的函数或数据到 object 参数中,在页面的函数中用 this 可以访问

Page()函数具体使用代码如下:

//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onShow: function() {
    // Do something when page show.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  },
  onPullDownRefresh: function() {
    // Do something when pull down.
  },
  onReachBottom: function() {
    // Do something when page reach bottom.
  },
  onShareAppMessage: function () {
   // return custom share data when user share.
  },
  onPageScroll: function() {
    // Do something when page scroll
  },
  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'
  }
})

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

渲染层可以通过 WXML 对数据进行绑定。

例如:

//index.wxml
 <view>{{text}}</view>
<view>{{array[0].msg}}</view>
//index.js
Page({
  data: {
    text: 'init data',
    array: [{msg: '1'}, {msg: '2'}]
  }
})

2、生命周期函数

  • onLoad: 页面加载

一个页面只会调用一次,可以在 onLoad 中获取wx.navigateTo和wx.redirectTo以及<navagator/>中的query 参数

  • onShow: 页面显示

每次打开页面都会调用一次。

  • onReady: 页面初次渲染完成

    一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
    对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。
    
  • onHide: 页面隐藏

当navigateTo或底部tab切换时调用。

  • onUnload: 页面卸载

当redirectTo或navigateBack的时候调用。

下图来自微信官方文档:
这里写图片描述
3、页面相关事件处理函数

  • onPullDownRefresh: 下拉刷新

监听用户下拉刷新事件,需要在app.json的window选项中或页面配置中开启enablePullDownRefresh,当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新。

  • onReachBottom: 上拉触底

监听用户上拉触底事件,可以在app.json的window选项中或页面配置中设置触发距离- onReachBottomDistance。在触发距离内滑动期间,本事件只会被触发一次。

  • onPageScroll: 页面滚动

监听用户滑动页面事件。参数为 Object,包含以下字段:

字段类型说明
scrollTopNumber页面在垂直方向已滚动的距离(单位px)
  • onShareAppMessage: 用户转发

只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮。用户点击转发按钮的时候会调用此事件需要 return 一个 Object,用于自定义转发内容。

分享参数说明如下:

字段说明默认值
title转发标题当前小程序名称
desc分享描述当前小程序名称
path转发路径当前页面 path ,必须是以 / 开头的完整路径

示例代码:

Page({
  onShareAppMessage: function () {
    return {
      title: '自定义转发标题',
      desc:  '自定义分享描述',
      path: '/page/user?id=123'
    }
  }
})

4、页面路由管理

微信小程序的路由管理都是由微信微信小程序框架来管理的,路由的触发方式和页面生命周期函数如下所示:

路由方式触发时机路由前页面路由后页面
初始化小程序打开的第一个页面 onLoad, onShow
打开新页面调用 API wx.navigateTo 或使用组件 onHideonLoad, onShow
页面重定向调用 API wx.redirectTo 或使用组件 onUnloadonLoad, onShow
页面返回调用 API wx.navigateBack 或使用组件或用户按左上角返回按钮onUnload(多层页面返回,则每个页面都会按顺序出发onUnload)onShow
Tab 切换调用 API wx.switchTab 或使用组件 或用户切换 Tab 各种情况具体分析
重启动调用 API wx.reLaunch 或使用组件 onUnloadonLoad, onShow

5、自定义函数
除了初始化数据和生命周期函数,Page中还可以定义一些特殊的函数:事件处理函数。
比如我们在文字上上绑定了跳转函数:
示例代码如下

//index.wxml
 <view bindtap="clickme">click me</view>
//index.js
Page({
clickme:function(){  // 绑定的clickme事件
console.log('view tap')
}
})

6、setData设值函数
Page.prototype.setData()设值函数:setData函数用于将数据从逻辑层发送到视图层,同时改变this.data值。

setData()参数格式:接受一个对象,以Key、value的形式将this.data中的key对应的值改变成value。

其中key很灵活,以数据路径的方式给出,如array[2].message、a.b.c.d,并不需要在this.data中预先定义。
示例代码如下:

//index.wxml
<view class="btn-area">
  <view class="body-view">
    <text>{{text}}</text>
    <button bindtap="add">add line</button>
    <button bindtap="remove">remove line</button>
  </view>
</view>
var initData = 'this is first line\nthis is second line'
var extraLine = [];
Page({
  data: {
    text: initData
  },
  add: function(e) {
    extraLine.push('other line')
    this.setData({
      text: initData + '\n' + extraLine.join('\n')
    })
  },
  remove: function(e) {
    if (extraLine.length > 0) {
      extraLine.pop()
      this.setData({
        text: initData + '\n' + extraLine.join('\n')
      })
    }
  }
})

效果:
这里写图片描述

注意:直接修改this.data无效,还会造成数据不一致。单次设置的数据不能超过1024kb。

1 + 9 =
快来做第一个评论的人吧~