微信小程序 頁面

2022-05-11 15:58 更新

Page(Object object)

注冊小程序中的一個頁面。接受一個 Object 類型參數(shù),其指定頁面的初始數(shù)據(jù)、生命周期回調(diào)、事件處理函數(shù)等。

參數(shù)

Object object
屬性 類型 默認(rèn)值 必填 說明
data Object 頁面的初始數(shù)據(jù)
onLoad function 生命周期回調(diào)—監(jiān)聽頁面加載
onShow function 生命周期回調(diào)—監(jiān)聽頁面顯示
onReady function 生命周期回調(diào)—監(jiān)聽頁面初次渲染完成
onHide function 生命周期回調(diào)—監(jiān)聽頁面隱藏
onUnload function 生命周期回調(diào)—監(jiān)聽頁面卸載
onPullDownRefresh function 監(jiān)聽用戶下拉動作
onReachBottom function 頁面上拉觸底事件的處理函數(shù)
onShareAppMessage function 用戶點擊右上角轉(zhuǎn)發(fā)
onShareTimeline function 用戶點擊右上角轉(zhuǎn)發(fā)到朋友圈
onAddToFavorites function 用戶點擊右上角收藏
onPageScroll function 頁面滾動觸發(fā)事件的處理函數(shù)
onResize function 頁面尺寸改變時觸發(fā),詳見 響應(yīng)顯示區(qū)域變化
onTabItemTap function 當(dāng)前是 tab 頁時,點擊 tab 時觸發(fā)
其他 any 開發(fā)者可以添加任意的函數(shù)或數(shù)據(jù)到 Object 參數(shù)中,在頁面的函數(shù)中用 this 可以訪問

示例代碼

//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onShow: function() {
    // Do something when page show.
  },
  onReady: function() {
    // Do something when page ready.
  },
  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
  },
  onResize: function() {
    // Do something when page resize
  },
  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'
  }
})

data

data 是頁面第一次渲染使用的初始數(shù)據(jù)。

頁面加載時,data 將會以JSON字符串的形式由邏輯層傳至渲染層,因此data中的數(shù)據(jù)必須是可以轉(zhuǎn)成JSON的類型:字符串,數(shù)字,布爾值,對象,數(shù)組。

渲染層可以通過 WXML 對數(shù)據(jù)進(jìn)行綁定。

示例代碼:

在開發(fā)者工具中預(yù)覽效果

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

生命周期回調(diào)函數(shù)

生命周期的觸發(fā)以及頁面的路由方式詳見

onLoad(Object query)

頁面加載時觸發(fā)。一個頁面只會調(diào)用一次,可以在 onLoad 的參數(shù)中獲取打開當(dāng)前頁面路徑中的參數(shù)。

參數(shù):

名稱 類型 說明
query Object 打開當(dāng)前頁面路徑中的參數(shù)

onShow()

頁面顯示/切入前臺時觸發(fā)。

onReady()

頁面初次渲染完成時觸發(fā)。一個頁面只會調(diào)用一次,代表頁面已經(jīng)準(zhǔn)備妥當(dāng),可以和視圖層進(jìn)行交互。

注意:對界面內(nèi)容進(jìn)行設(shè)置的 API 如wx.setNavigationBarTitle,請在onReady之后進(jìn)行。詳見生命周期

onHide()

頁面隱藏/切入后臺時觸發(fā)。 如 wx.navigateTo 或底部 tab 切換到其他頁面,小程序切入后臺等。

onUnload()

頁面卸載時觸發(fā)。如wx.redirectTo或wx.navigateBack到其他頁面時。

頁面事件處理函數(shù)

onPullDownRefresh()

監(jiān)聽用戶下拉刷新事件。

  • 需要在app.json的window選項中或頁面配置中開啟enablePullDownRefresh。
  • 可以通過wx.startPullDownRefresh觸發(fā)下拉刷新,調(diào)用后觸發(fā)下拉刷新動畫,效果與用戶手動下拉刷新一致。
  • 當(dāng)處理完數(shù)據(jù)刷新后,wx.stopPullDownRefresh可以停止當(dāng)前頁面的下拉刷新。

onReachBottom()

監(jiān)聽用戶上拉觸底事件。

  • 可以在app.json的window選項中或頁面配置中設(shè)置觸發(fā)距離onReachBottomDistance。
  • 在觸發(fā)距離內(nèi)滑動期間,本事件只會被觸發(fā)一次。

onPageScroll(Object object)

監(jiān)聽用戶滑動頁面事件。

參數(shù) Object object:

屬性 類型 說明
scrollTop Number 頁面在垂直方向已滾動的距離(單位px)

注意:請只在需要的時候才在 page 中定義此方法,不要定義空方法。以減少不必要的事件派發(fā)對渲染層-邏輯層通信的影響。 注意:請避免在 onPageScroll 中過于頻繁的執(zhí)行 setData 等引起邏輯層-渲染層通信的操作。尤其是每次傳輸大量數(shù)據(jù),會影響通信耗時。

onAddToFavorites(Object object)

本接口為 Beta 版本,安卓 7.0.15 版本起支持,暫只在安卓平臺支持

監(jiān)聽用戶點擊右上角菜單“收藏”按鈕的行為,并自定義收藏內(nèi)容。

參數(shù) Object object:

參數(shù) 類型 說明
webviewUrl String 頁面中包含web-view組件時,返回當(dāng)前web-view的url

此事件處理函數(shù)需要 return 一個 Object,用于自定義收藏內(nèi)容:

字段 說明 默認(rèn)值
title 自定義標(biāo)題 頁面標(biāo)題或賬號名稱
imageUrl 自定義圖片,顯示圖片長寬比為 1:1 頁面截圖
query 自定義query字段 當(dāng)前頁面的query

示例代碼

Page({
  onAddToFavorites(res) {
    // webview 頁面返回 webviewUrl
    console.log('WebviewUrl: ', res.webviewUrl)
    return {
      title: '自定義標(biāo)題',
      imageUrl: 'http://demo.png',
      query: 'name=xxx&age=xxx',
    }
  }
})

onShareAppMessage(Object object)

監(jiān)聽用戶點擊頁面內(nèi)轉(zhuǎn)發(fā)按鈕(button 組件 open-type="share")或右上角菜單“轉(zhuǎn)發(fā)”按鈕的行為,并自定義轉(zhuǎn)發(fā)內(nèi)容。

注意:只有定義了此事件處理函數(shù),右上角菜單才會顯示“轉(zhuǎn)發(fā)”按鈕

參數(shù) Object object:

參數(shù) 類型 說明 最低版本
from String 轉(zhuǎn)發(fā)事件來源。
button:頁面內(nèi)轉(zhuǎn)發(fā)按鈕;
menu:右上角轉(zhuǎn)發(fā)菜單
1.2.4
target Object 如果 from 值是 button,則 target 是觸發(fā)這次轉(zhuǎn)發(fā)事件的 button,否則為 undefined 1.2.4
webViewUrl String 頁面中包含web-view組件時,返回當(dāng)前web-view的url 1.6.4

此事件處理函數(shù)需要 return 一個 Object,用于自定義轉(zhuǎn)發(fā)內(nèi)容,返回內(nèi)容如下:

自定義轉(zhuǎn)發(fā)內(nèi)容 基礎(chǔ)庫 2.8.1 起,分享圖支持云圖片。

字段 說明 默認(rèn)值 最低版本
title 轉(zhuǎn)發(fā)標(biāo)題 當(dāng)前小程序名稱
path 轉(zhuǎn)發(fā)路徑 當(dāng)前頁面 path ,必須是以 / 開頭的完整路徑
imageUrl 自定義圖片路徑,可以是本地文件路徑、代碼包文件路徑或者網(wǎng)絡(luò)圖片路徑。支持PNG及JPG。顯示圖片長寬比是 5:4。 使用默認(rèn)截圖 1.5.0

示例代碼

在開發(fā)者工具中預(yù)覽效果

Page({
  onShareAppMessage: function (res) {
    if (res.from === 'button') {
      // 來自頁面內(nèi)轉(zhuǎn)發(fā)按鈕
      console.log(res.target)
    }
    return {
      title: '自定義轉(zhuǎn)發(fā)標(biāo)題',
      path: '/page/user?id=123'
    }
  }
})

onShareTimeline()

基礎(chǔ)庫 2.11.3 開始支持,低版本需做兼容處理。
本接口為 Beta 版本,暫只在 Android 平臺支持,詳見分享到朋友圈 (Beta)

監(jiān)聽右上角菜單“分享到朋友圈”按鈕的行為,并自定義發(fā)享內(nèi)容。

注意:只有定義了此事件處理函數(shù),右上角菜單才會顯示“分享到朋友圈”按鈕

自定義轉(zhuǎn)發(fā)內(nèi)容

事件處理函數(shù)返回一個 Object,用于自定義分享內(nèi)容,不支持自定義頁面路徑,返回內(nèi)容如下:

字段 說明 默認(rèn)值 最低版本
title 自定義標(biāo)題,即朋友圈列表頁上顯示的標(biāo)題 當(dāng)前小程序名稱
query 自定義頁面路徑中攜帶的參數(shù),如 path?a=1&b=2 的 “?” 后面部分 當(dāng)前頁面路徑攜帶的參數(shù)
imageUrl 自定義圖片路徑,可以是本地文件或者網(wǎng)絡(luò)圖片。支持 PNG 及 JPG,顯示圖片長寬比是 1:1。 默認(rèn)使用小程序 Logo

onResize(Object object)

基礎(chǔ)庫 2.4.0 開始支持,低版本需做兼容處理。

小程序屏幕旋轉(zhuǎn)時觸發(fā)。詳見 響應(yīng)顯示區(qū)域變化

onTabItemTap(Object object)

基礎(chǔ)庫 1.9.0 開始支持,低版本需做兼容處理。

點擊 tab 時觸發(fā)

Object 參數(shù)說明:

參數(shù) 類型 說明 最低版本
index String 被點擊tabItem的序號,從0開始 1.9.0
pagePath String 被點擊tabItem的頁面路徑 1.9.0
text String 被點擊tabItem的按鈕文字 1.9.0

示例代碼:

Page({
  onTabItemTap(item) {
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  }
})

組件事件處理函數(shù)

Page 中還可以定義組件事件處理函數(shù)。在渲染層的組件中加入事件綁定,當(dāng)事件被觸發(fā)時,就會執(zhí)行 Page 中定義的事件處理函數(shù)。

示例代碼:

在開發(fā)者工具中預(yù)覽效果

<view bindtap="viewTap"> click me </view>
Page({
  viewTap: function() {
    console.log('view tap')
  }
})

Page.route

基礎(chǔ)庫 1.2.0 開始支持,低版本需做兼容處理。

到當(dāng)前頁面的路徑,類型為String。

Page({
  onShow: function() {
    console.log(this.route)
  }
})

Page.prototype.setData(Object data, Function callback)

setData 函數(shù)用于將數(shù)據(jù)從邏輯層發(fā)送到視圖層(異步),同時改變對應(yīng)的 this.data 的值(同步)。

參數(shù)說明

字段 類型 必填 描述 最低版本
data Object 這次要改變的數(shù)據(jù)
callback Function setData引起的界面更新渲染完畢后的回調(diào)函數(shù) 1.5.0

Object 以 key: value 的形式表示,將 this.data 中的 key 對應(yīng)的值改變成 value。

其中 key 可以以數(shù)據(jù)路徑的形式給出,支持改變數(shù)組中的某一項或?qū)ο蟮哪硞€屬性,如 array[2].message,a.b.c.d,并且不需要在 this.data 中預(yù)先定義。

注意:

  1. 直接修改 this.data 而不調(diào)用 this.setData 是無法改變頁面的狀態(tài)的,還會造成數(shù)據(jù)不一致。
  2. 僅支持設(shè)置可 JSON 化的數(shù)據(jù)。
  3. 單次設(shè)置的數(shù)據(jù)不能超過1024kB,請盡量避免一次設(shè)置過多的數(shù)據(jù)。
  4. 請不要把 data 中任何一項的 value 設(shè)為 undefined ,否則這一項將不被設(shè)置并可能遺留一些潛在問題。

示例代碼:

在開發(fā)者工具中預(yù)覽效果

<!--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>
// 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
    // 應(yīng)該使用 setData
    this.setData({
      text: 'changed data'
    })
  },
  changeNum: function() {
    // 或者,可以修改 this.data 之后馬上用 setData 設(shè)置一下修改了的字段
    this.data.num = 1
    this.setData({
      num: this.data.num
    })
  },
  changeItemInArray: function() {
    // 對于對象或數(shù)組字段,可以直接修改一個其下的子字段,這樣做通常比修改整個對象或數(shù)組更好
    this.setData({
      'array[0].text':'changed data'
    })
  },
  changeItemInObject: function(){
    this.setData({
      'object.text': 'changed data'
    });
  },
  addNewField: function() {
    this.setData({
      'newField.text': 'new data'
    })
  }
})

頁面間通信

基礎(chǔ)庫 2.7.3 開始支持,低版本需做兼容處理。

如果一個頁面由另一個頁面通過 wx.navigateTo 打開,這兩個頁面間將建立一條數(shù)據(jù)通道:

  • 被打開的頁面可以通過 this.getOpenerEventChannel() 方法來獲得一個 EventChannel 對象;
  • wx.navigateTo 的 success 回調(diào)中也包含一個 EventChannel 對象。

這兩個 EventChannel 對象間可以使用 emit 和 on 方法相互發(fā)送、監(jiān)聽事件。


PageObject[] getCurrentPages()

獲取當(dāng)前頁面棧。數(shù)組中第一個元素為首頁,最后一個元素為當(dāng)前頁面。

注意:

  • 不要嘗試修改頁面棧,會導(dǎo)致路由以及頁面狀態(tài)錯誤。
  • 不要在 App.onLaunch 的時候調(diào)用 getCurrentPages(),此時 page 還沒有生成。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號