前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年02月 微信小程序-页面生命周期

【愚公系列】2022年02月 微信小程序-页面生命周期

作者头像
愚公搬代码
发布2022-12-01 09:10:17
5200
发布2022-12-01 09:10:17
举报
文章被收录于专栏:历史专栏

文章目录


一、页面生命周期

1.JS使用

注册小程序中的一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。

小程序页面的生命周期函数如下:

属性

类型

说明

data

Object

页面的初始数据

options

Object

页面的组件选项,同 Component 构造器 中的 options ,需要基础库版本 2.10.1

behaviors

String Array

类似于mixins和traits的组件间代码复用机制,参见 behaviors,需要基础库版本 2.9.2

onLoad

function

生命周期回调—监听页面加载

onShow

function

生命周期回调—监听页面显示

onReady

function

生命周期回调—监听页面初次渲染完成

onHide

function

生命周期回调—监听页面隐藏

onUnload

function

生命周期回调—监听页面卸载

onPullDownRefresh

function

监听用户下拉动作

onReachBottom

function

页面上拉触底事件的处理函数

onShareAppMessage

function

用户点击右上角转发

onShareTimeline

function

用户点击右上角转发到朋友圈

onAddToFavorites

function

用户点击右上角收藏

onPageScroll

function

页面滚动触发事件的处理函数

onResize

function

页面尺寸改变时触发,详见 响应显示区域变化

onTabItemTap

function

当前是 tab 页时,点击 tab 时触发

onSaveExitState

function

页面销毁前保留状态回调

其他

any

开发者可以添加任意的函数或数据到 Object 参数中,在页面的函数中用 this 可以访问。这部分属性会在页面实例创建时进行一次深拷贝。

2.页面特殊事件处理

2.1 onPullDownRefresh()

监听用户下拉刷新事件。

  • 需要在app.json的window选项中或页面配置中开启enablePullDownRefresh。
  • 可以通过wx.startPullDownRefresh触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。
  • 当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新。

2.2 onReachBottom()

监听用户上拉触底事件。

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

2.3 onPageScroll(Object object)

监听用户滑动页面事件。

2.4 onAddToFavorites(Object object)

监听用户点击右上角菜单“收藏”按钮的行为,并自定义收藏内容。

代码语言:javascript
复制
Page({
  onAddToFavorites(res) {
    // webview 页面返回 webViewUrl
    console.log('webViewUrl: ', res.webViewUrl)
    return {
      title: '自定义标题',
      imageUrl: 'http://demo.png',
      query: 'name=xxx&age=xxx',
    }
  }
})

2.5 onShareAppMessage(Object object)

监听用户点击页面内转发按钮(button 组件 open-type=“share”)或右上角菜单“转发”按钮的行为,并自定义转发内容。

代码语言:javascript
复制
Page({
  onShareAppMessage() {
    const promise = new Promise(resolve => {
      setTimeout(() => {
        resolve({
          title: '自定义转发标题'
        })
      }, 2000)
    })
    return {
      title: '自定义转发标题',
      path: '/page/user?id=123',
      promise 
    }
  }
})

2.6 onShareTimeline()

监听右上角菜单“分享到朋友圈”按钮的行为,并自定义分享内容。

2.7 onResize(Object object)

小程序屏幕旋转时触发。

2.8 onTabItemTap(Object object)

点击 tab 时触发

代码语言:javascript
复制
Page({
  onTabItemTap(item) {
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  }
})

2.9 onSaveExitState()

每当小程序可能被销毁之前,页面回调函数 onSaveExitState 会被调用,可以进行退出状态的保存。

3.组件特殊事件处理

3.1 页面点击事件

代码语言:javascript
复制
<view bindtap="viewTap"> click me </view>
代码语言:javascript
复制
Page({
  viewTap: function() {
    console.log('view tap')
  }
})

3.2 页面路由

代码语言:javascript
复制
Page({
  onShow: function() {
    console.log(this.route)
  }
})

3.3 数据改变

代码语言:javascript
复制
<!--index.wxml-->
<view>{{text}}</view>
<button bindtap="changeText"> Change normal data </button>
<view>{{num}}</view>
<button bindtap="changeNum"> Change normal num </button>
<view>{{array[0].text}}</view>
<button bindtap="changeItemInArray"> Change Array data </button>
<view>{{object.text}}</view>
<button bindtap="changeItemInObject"> Change Object data </button>
<view>{{newField.text}}</view>
<button bindtap="addNewField"> Add new data </button>
代码语言:javascript
复制
// index.js
Page({
  data: {
    text: 'init data',
    num: 0,
    array: [{text: 'init data'}],
    object: {
      text: 'init data'
    }
  },
  changeText: function() {
    // this.data.text = 'changed data' // 不要直接修改 this.data
    // 应该使用 setData
    this.setData({
      text: 'changed data'
    })
  },
  changeNum: function() {
    // 或者,可以修改 this.data 之后马上用 setData 设置一下修改了的字段
    this.data.num = 1
    this.setData({
      num: this.data.num
    })
  },
  changeItemInArray: function() {
    // 对于对象或数组字段,可以直接修改一个其下的子字段,这样做通常比修改整个对象或数组更好
    this.setData({
      'array[0].text':'changed data'
    })
  },
  changeItemInObject: function(){
    this.setData({
      'object.text': 'changed data'
    });
  },
  addNewField: function() {
    this.setData({
      'newField.text': 'new data'
    })
  }
})

二、具体使用

代码语言:javascript
复制
Page({
  // 页面第一次渲染使用的初始数据
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // 生命周期回调—监听页面加载
  },
  onShow: function() {
    // 生命周期回调—监听页面显示
    console.log(this.route)//页面路由
  },
  onReady: function() {
    // 生命周期回调—监听页面初次渲染完成
  },
  onHide: function() {
    // 生命周期回调—监听页面隐藏
  },
  onUnload: function() {
    // 生命周期回调—监听页面卸载
  },
  onPullDownRefresh: function() {
    // 监听用户下拉动作
  },
  onReachBottom: function() {
    // 页面上拉触底事件的处理函数
  },
  onShareAppMessage: function (options) {
    // 用户点击右上角转发
    if (options.from === 'button') {
      // 来自页面内转发按钮
      console.log(res.target)
    }
    return {
      title: '自定义转发标题',
      path: '/page/user?id=123'
    }
  },
  onShareTimeline: function () {
    // 用户点击右上角转发到朋友圈
  },
  onAddToFavorites: function (options) {
    // 用户点击右上角收藏
    // webview 页面返回 webviewUrl
    console.log('WebviewUrl: ', options.webviewUrl)
    return {
      title: '自定义标题',
      imageUrl: 'http://demo.png',
      query: 'name=xxx&age=xxx',
    }
  },
  onPageScroll: function(options) {
    // 页面滚动触发事件的处理函数
  },
  onResize: function() {
    // 页面尺寸改变时触发
  },
  onTabItemTap(item) {
  	// 当前是 tab 页时,点击 tab 时触发
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  //开发者可以添加任意的函数或数据到 Object 参数中,在页面的函数中用 this 可以访问
  //页面<view bindtap="viewTap"> click me </view>处理函数
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    }, function() {
      // this is setData callback
    })
  },
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、页面生命周期
    • 1.JS使用
      • 2.页面特殊事件处理
        • 2.1 onPullDownRefresh()
        • 2.2 onReachBottom()
        • 2.3 onPageScroll(Object object)
        • 2.4 onAddToFavorites(Object object)
        • 2.5 onShareAppMessage(Object object)
        • 2.6 onShareTimeline()
        • 2.7 onResize(Object object)
        • 2.8 onTabItemTap(Object object)
        • 2.9 onSaveExitState()
      • 3.组件特殊事件处理
        • 3.1 页面点击事件
        • 3.2 页面路由
        • 3.3 数据改变
    • 二、具体使用
    相关产品与服务
    云开发 CloudBase
    云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档