微信小程式-06-詳解介紹.js 邏輯層文件-註冊頁面

来源:https://www.cnblogs.com/xpwi/archive/2018/09/16/9657793.html
-Advertisement-
Play Games

上一篇介紹的是 app.js 邏輯層文件中註冊程式,對應的每個分頁面都會有的 js 文件中 page() 函數註冊頁面 微信小程式 06 詳解介紹.js 邏輯層文件 註冊頁面 寶典官方文檔: https://developers.weixin.qq.com/miniprogram/dev/frame ...


上一篇介紹的是 app.js 邏輯層文件中註冊程式,對應的每個分頁面都會有的 js 文件中 page() 函數註冊頁面

微信小程式-06-詳解介紹.js 邏輯層文件-註冊頁面

頁面 Page

  • Page(Object)
  • Page(Object) 函數用來註冊一個頁面。接受一個 Object 類型參數,其指定的初始數據、聲明周期回調、時間處理函數等
  • Object 參數說明:
屬性 類型 描述
data Object 頁面的初始數據
onLoad Function 生命周期回調—監聽頁面載入
onShow Function 生命周期回調—監聽頁面顯示
onReady Function 生命周期回調—監聽頁面初次渲染完成
onHide Function 生命周期回調—監聽頁面隱藏
onUnload Function 生命周期回調—監聽頁面卸載
onPullDownRefresh Function 監聽用戶下拉動作
onReachBottom Function 頁面上拉觸底事件的處理函數
onShareAppMessage Function 用戶點擊右上角轉發
onPageScroll Function 頁面滾動觸發事件的處理函數
onTabItemTap Function 當前是 tab 頁時,點擊 tab 時觸發
其他 Any 開發者可以添加任意的函數或數據到 Object 參數中,在頁面的函數中用 this 可以訪問
  • Object 內容在頁面載入時會進行一次深拷貝,需考慮數據大小對頁面載入的開銷
  • 示例:
//和 app 一樣,輸入 page 根據提示回車,會自動生成預製的函數
Page({

  /**
   * 頁面的初始數據
   */
  data: {
    text: "這裡寫頁面數據"
  },

  /**
   * 生命周期函數--監聽頁面載入
   */
  onLoad: function (options) {
    
  },

  /**
   * 生命周期函數--監聽頁面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函數--監聽頁面顯示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函數--監聽頁面隱藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函數--監聽頁面卸載
   */
  onUnload: function () {
    
  },

  /**
   * 頁面相關事件處理函數--監聽用戶下拉動作
   */
  onPullDownRefresh: function () {
    
  },

  /**
   * 頁面上拉觸底事件的處理函數
   */
  onReachBottom: function () {
    
  },

  /**
   * 用戶點擊右上角分享
   */
  onShareAppMessage: function () {
    
  },

  /**
   * 當頁面滾動的時候執行
   */
  onPageScroll: function() {

  },

  onTabItemTap(item) {
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  /**
   * 事件處理
   */
  viewTap: function() {
    this.setData({
      text: '為更新視圖設置一些數據'
    ), function() {
      // 這裡是設置數據回調
    }
  },
  
  customData: {
    hi: 'MINA'
  }
})

data

  • data 是頁面第一次渲染使用的初試數據

  • 頁面載入時,data 將會以 json 字元串的形式由邏輯層傳至渲染層,因此 data 中的數據必須是可以轉成 json 的類型:字元串,數字,布爾值,對象,數組
  • 渲染層可以通過 WXML(後續會詳細說明) 對數據進行綁定
  • 示例代碼:
 // wxml 文件
 <view>{{text}}</view>
 <view>{{array[0].msg}}</view>
//js 文件
Page({
  data: {
    text: 'int data',
    array:[{msg: '1'}, {msg: '2'}]
  }
})

生命周期回調函數

  • 生命周期的觸發以及頁面的路由方式 詳見

  • onLoad(Object query)
  • 頁面載入時觸發,一個頁面只會調用一次,可以在 onLoad 的參數中獲取打開當前頁面路徑中的參數
  • 參數說明:

名稱 類型 說明
query Object 打開當前頁面的路徑中的參數

onShow()

  • 頁面顯示、切入前臺時觸發

onReady()

  • 頁面初次渲染完成觸發。一個頁面只會調用一次,代表頁面已經準備妥當,可以和視圖層進行交互
  • 【註意】:對界面內容進行設置的 API 如 wx.setNavigationBarTitle,請在 onReady 之後進行。詳見生命周期(本篇後面介紹)

onHide()

  • 頁面隱藏、切入後臺時觸發。如 navigationTo 或底部 tab 切換到其他壓面,小程式切入後臺等

onUnload()

  • 頁面卸載時觸發。如 redirectTo 或 navigateBack 到其他頁面時

頁面處理函數

onPullDownRefresh()

  • 監聽用戶下拉刷新事件
    • 需要在 app.json 的 window 選項中或頁面配置中開啟 enablePullDownRefresh
    • 可以通過 wx.startPullDownRefresh 觸發下拉刷新,調用後觸發下拉刷新動畫,效果與用戶手動下拉刷新一致
    • 當處理完數據刷新後,wx.stopPullDownRefresh 可以停止當前頁面的下拉刷新

onReachBottom()

  • 監聽用戶上拉觸底事件
    • 可以在 app.josn 的 window 選項中或頁面配置中設置觸發距離 onReachBottomDistance
    • 在觸發距離內滑動期間,本事件只會被觸發一次

onPageScroll(Object)

  • 監聽用戶滑動頁面事件

  • Object 參數說明:

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

onShareAppMessage(Object)

  • 監聽用戶點擊頁面內轉發按鈕(button 組件 open-type="share")或右上角菜單 “轉發” 按鈕的行為,性自定義轉發內容
  • 【註意】:只有定義了此事件處理函數,右上角菜單才會顯示 “轉發” 按鈕
  • Object 參數說明:
參數 類型 說明 最低版本
from String 轉發事件來源。
button:頁面內轉發按鈕;
menu:右上角轉髮菜單
1.2.4
target Object 如果 from 值是 button,則 target 是觸發這次轉發事件的 button,否則為 undefined 1.2.4
webViewUrl String 頁面中包含<web-view>組件時,返回當前<web-view>的url 1.6.4
  • 此事件需要 return 一個 Object,用於自定義轉發內容,返回內容如下:
  • 自定義轉發內容
欄位 說明 預設值 最低版本
title 轉發標題 當前小程式名稱
path 轉發路徑 當前頁面 path ,必須是以 / 開頭的完整路徑
imageUrl 自定義圖片路徑,可以是本地文件路徑、代碼包文件路徑或者網路圖片路徑。支持PNG及JPG。顯示圖片長寬比是 5:4。 使用預設截圖 1.5.0
  • 示例代碼:
Page({
  onShareAppMessage: function (res) {
    if (res.from === 'button') {
      // 來自頁面內轉發按鈕
      console.log(res.target)
    }
    return {
      title: '自定義轉發標題',
      path: '/page/user?id=123'
    }
  }
})

onTabItemTap(Object)

  • 基礎庫 1.9.0 開始支持,低版本需做相容處理
  • 點擊 tab 時觸發
  • Object 參數說明:
參數 類型 說明 最低版本
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)
  }
})

組件事件處理函數

  • Page 中還可以定義組件事件處理函數。在渲染層的組件中加入事件綁定,當事件被觸發時,就會執行 Page 中定義的事件處理函數
  • 示例代碼:
<view bindtap="viewTap"> click me </view>
Page({
  viewTap: function() {
    console.log('view tap')
  }
})

Page.route

  • 基礎庫 1.2.0 開始支持,低版本需做相容處理
  • 到當前頁面的路徑,類型為String
Page({
  onShow: function() {
    console.log(this.route)
  }
})

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

  • setData 函數用於將數據從邏輯層發送到視圖層(非同步),同時改變對應的 this.data 的值(同步)

  • 參數說明:

欄位 類型 必填 描述 最低版本
data Object 這次要改變的數據
callback Function setData引起的界面更新渲染完畢後的回調函數 1.5.0
  • Object 以 key: value 的形式表示,將 this.data 中的 key 對應的值改變成 value
  • 其中其中 key 可以以數據路徑的形式給出,支持改變數組中的某一項或對象的某個屬性
  • 如 array[2].message,a.b.c.d,並且不需要在 this.data 中預先定義

  • 【註意】:
    • 1.直接修改 this.data 而不調用 this.setData 是無法改變頁面的狀態的,還會造成數據不一致
    • 2.僅支持設置可 JSON 化的數據
    • 3.單次設置的數據不能超過1024kB,請儘量避免一次設置過多的數據
    • 4.請不要把 data 中任何一項的 value 設為 undefined ,否則這一項將不被設置並可能遺留一些潛在問題
  • 示例代碼:
<!--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'  // bad, it can not work
    this.setData({
      text: 'changed data'
    })
  },
  changeNum: function() {
    this.data.num = 1
    this.setData({
      num: this.data.num
    })
  },
  changeItemInArray: function() {
    // you can use this way to modify a danamic data path
    this.setData({
      'array[0].text':'changed data'
    })
  },
  changeItemInObject: function(){
    this.setData({
      'object.text': 'changed data'
    });
  },
  addNewField: function() {
    this.setData({
      'newField.text': 'new data'
    })
  }
})

生命周期

以下內容你不需要立馬完全弄明白,不過以後它會有幫助

  • 下圖說明瞭 Page 實例的生命周期
  • 這裡寫圖片描述

更多文章鏈接:微信小程式


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.概述 在linux中,很多程式和腳本都通過環境變數來獲取系統信息,存儲臨時數據,配置信息。環境變數是指用來存儲有關shell會話和工作環境信息,允許你在記憶體中存儲數據,以便程式或shell中運行的腳本能夠輕鬆訪問到它們。也是存儲持久數據的一種簡便方法。在bash shell中,環境變數分為:全局 ...
  • 載入和動態鏈接 從編譯/鏈接和運行的角度看,應用程式和庫程式的連接有兩種方式。 一種是固定的、靜態的連接,就是把需要用到的庫函數的目標代碼(二進位)代碼從程式庫中抽取出來,鏈接進應用軟體的目標映像中; 另一種是動態鏈接,是指庫函數的代碼並不進入應用軟體的目標映像,應用軟體在編譯/鏈接階段並不完成跟庫 ...
  • 一 需求 隨著公司業務的發展,資料庫實例也逐漸增多,資料庫也會越來越多,有時候我們會發現正式生產資料庫也測試資料庫數據不一致,也有可能是預發佈環境下的資料庫與其他資料庫架構不一致,或者,分散式資料庫上線,發現某些不可預知的原因,也會導致資料庫之間架構不一致等等。因此,在複雜的資料庫對象中,迅速全部找 ...
  • SQL 先說點廢話,很久沒發文了,整理了下自己當時入門 SQL 的筆記,無論用於入門,回顧,參考查詢,應該都是有一定價值的,可以按照目錄各取所需。SQL資料庫有很多,MySQL是一種,本文基本都是SQL通用標準,有些標準很不統一的地方就用MySQL的寫法了。希望本文幫你快速瞭解SQL的基本操作和概念 ...
  • 由於最近要開始深入的學習一下hbase,所以,先大概瞭解了hbase的基本架構,在此簡單的記錄一下。 Hbase的邏輯視圖 Hbase的物理存儲 HRegion Table中所有行都按照row key的字典序排列。 Table在行的方向上分割為多個HRegion。 HRegion按大小分割的,每個表 ...
  • 買了一個阿裡的伺服器,安裝的系統是CentOS7,在上面搭建一個資料庫系統,盡然花了一個早上的時間,記錄下最終的解決方案。 MYSQL5.7的安裝: 1.首先檢查伺服器上是否已經安裝了MYSQL的數據了。 如果已經安裝過mysql數據的話,需要卸載以前舊版的數據,否則容易引起衝突,導致後安裝失敗或者 ...
  • 前言: 一、背景介紹 二、大數據介紹 正文: 一、大數據相關的工作介紹 二、大數據工程師的技能要求 三、大數據學習規劃 四、持續學習資源推薦(書籍,博客,網站) 五、項目案例分析(批處理+實時處理) 大數據學習群:119599574 前言 一、背景介紹 本人目前是一名大數據工程師,項目數據50T,日 ...
  • 1. 創建視圖 1.1 創建視圖的語法形式 1.2 在單表上創建視圖 例1:在t表格上創建一個名為view_t的視圖: 預設情況下創建的視圖和基本表的欄位是一樣的,也可以通過指定視圖欄位的名稱還創建視圖。 例2:在t表格上創建一個名為view_t2的視圖: qty 1.3 在多表上創建視圖 MySQ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...