微信小程式開發基礎知識總結

来源:http://www.cnblogs.com/wuhuacong/archive/2017/07/31/7223785.html
-Advertisement-
Play Games

微信小程式在無論在功能、文檔及相關支持方面,都是優於前面幾種微信賬號類型,它提供了很多原生程式才有的介面,使得我們的小程式在很多方面突破H5頁面應用的限制,更加接近原生程式的功能,因此微信小程式具有很大的前景想象力。它提供了自己的視圖層描述語言 WXML 和 WXSS,以及基於 JavaScript... ...


微信小程式在無論在功能、文檔及相關支持方面,都是優於前面幾種微信賬號類型,它提供了很多原生程式才有的介面,使得我們的小程式在很多方面突破H5頁面應用的限制,更加接近原生程式的功能,因此微信小程式具有很大的前景想象力。它提供了自己的視圖層描述語言 WXML 和 WXSS,以及基於 JavaScript 的邏輯層框架,併在視圖層與邏輯層間提供了數據傳輸和事件系統,可以讓開發者可以方便的聚焦於數據與邏輯上。

1、小程式的目錄結構

小程式的目錄結構如下所示。

其中項目級別的的文件包括 app.js、app.json、app.wxss 這三個。其中.js尾碼的是腳本文件,.json尾碼的文件是配置文件,.wxss尾碼的是樣式表文件。

頁面級別可以包含很多個頁面,如index,detail等頁面,每個頁面都包含.js,.json,.wxml,.wxss這些文件,其中.wxml為頁面視圖文件,是自定義標簽的HTML頁面。

app.js是小程式的腳本代碼。我們可以在這個文件中監聽並處理小程式的生命周期函數、聲明全局變數,可以調用框架提供的豐富的 API。

app.json 是對整個小程式的全局配置。我們可以在這個文件中配置小程式是由哪些頁面組成,配置小程式的視窗背景色,配置導航條樣式,配置預設標題。

app.wxss 是整個小程式的公共樣式表。我們可以在頁面組件的 class 屬性上直接使用 app.wxss 中聲明的樣式規則。

一個小程式主體部分由三個文件組成,必須放在項目的根目錄。

 

 微信小程式中的每一個頁面的【路徑+頁面名】都需要寫在 app.json 的 pages 中,且 pages 中的第一個頁面是小程式的首頁。

每一個小程式頁面是由同路徑下同名的四個不同尾碼文件的組成,如:index.js、index.wxml、index.wxss、index.json。.js尾碼的文件是腳本文件,.json尾碼的文件是配置文件,.wxss尾碼的是樣式表文件,.wxml尾碼的文件是頁面結構文件。

index.json 是頁面的配置文件:頁面的配置文件是非必要的。當有頁面的配置文件時,配置項在該頁面會覆蓋 app.json 的 window 中相同的配置項。如果沒有指定的頁面配置文件,則在該頁面直接使用 app.json 中的預設配置。

 

邏輯層(App Service)

小程式開發框架的邏輯層是由JavaScript編寫。

邏輯層將數據進行處理後發送給視圖層,同時接受視圖層的事件反饋。 在 JavaScript 的基礎上,我們做了一些修改,以方便地開發小程式。

  • 增加 App 和 Page 方法,進行程式和頁面的註冊。
  • 增加 getApp 和 getCurrentPages 方法,分別用來獲取 App 實例和當前頁面棧。
  • 提供豐富的 API,如微信用戶數據,掃一掃,支付等微信特有能力。
  • 每個頁面有獨立的作用域,並提供模塊化能力。
  • 由於框架並非運行在瀏覽器中,所以 JavaScript 在 web 中一些能力都無法使用,如 document,window 等。
  • 開發者寫的所有代碼最終將會打包成一份 JavaScript,併在小程式啟動的時候運行,直到小程式銷毀。類似 ServiceWorker,所以邏輯層也稱之為 App Service。

視圖層

框架的視圖層由 WXML 與 WXSS 編寫,由組件來進行展示。

將邏輯層的數據反應成視圖,同時將視圖層的事件發送給邏輯層。

WXML(WeiXin Markup language)用於描述頁面的結構。

WXSS(WeiXin Style Sheet)用於描述頁面的樣式。

組件(Component)是視圖的基本組成單元。

 

基礎組件

框架為開發者提供了一系列基礎組件,開發者可以通過組合這些基礎組件進行快速開發。

什麼是組件:

  • 組件是視圖層的基本組成單元。
  • 組件自帶一些功能與微信風格的樣式。
  • 一個組件通常包括開始標簽結束標簽屬性用來修飾這個組件,內容在兩個標簽之內。

    <tagname property="value">
      Content goes here ...
    </tagename>
    

    註意:所有組件與屬性都是小寫,以連字元-連接

API

框架提供豐富的微信原生API,可以方便的調起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。

說明:

  • wx.on 開頭的 API 是監聽某個事件發生的API介面,接受一個 CALLBACK 函數作為參數。當該事件觸發時,會調用 CALLBACK 函數。
  • 如未特殊約定,其他 API 介面都接受一個OBJECT作為參數。
  • OBJECT中可以指定successfailcomplete來接收介面調用結果。
參數名類型必填說明
success Function 介面調用成功的回調函數
fail Function 介面調用失敗的回調函數
complete Function 介面調用結束的回調函數(調用成功、失敗都會執行)

 

2、小程式介面功能列表

框架提供豐富的微信原生API,可以方便的調起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。

1)網路 API 列表:

wx.request 發起網路請求
wx.uploadFile 上傳文件
wx.downloadFile 下載文件
wx.connectSocket 創建 WebSocket 連接
wx.onSocketOpen 監聽 WebSocket 打開
wx.onSocketError 監聽 WebSocket 錯誤
wx.sendSocketMessage 發送 WebSocket 消息
wx.onSocketMessage 接受 WebSocket 消息
wx.closeSocket 關閉 WebSocket 連接
wx.onSocketClose 監聽 WebSocket 關閉

 

2)媒體 API 列表:

wx.chooseImage 從相冊選擇圖片,或者拍照
wx.previewImage 預覽圖片
wx.startRecord 開始錄音
wx.stopRecord 結束錄音
wx.playVoice 播放語音
wx.pauseVoice 暫停播放語音
wx.stopVoice 結束播放語音
wx.getBackgroundAudioPlayerState 獲取音樂播放狀態
wx.playBackgroundAudio 播放音樂
wx.pauseBackgroundAudio 暫停播放音樂
wx.seekBackgroundAudio 控制音樂播放進度
wx.stopBackgroundAudio 停止播放音樂
wx.onBackgroundAudioPlay 監聽音樂開始播放
wx.onBackgroundAudioPause 監聽音樂暫停
wx.onBackgroundAudioStop 監聽音樂結束
wx.chooseVideo 從相冊選擇視頻,或者拍攝

 

3)文件 API 列表:

wx.saveFile 保存文件
wx.getSavedFileList 獲取已保存的文件列表
wx.getSavedFileInfo 獲取已保存的文件信息
wx.removeSavedFile 刪除已保存的文件信息
wx.openDocument 打開文件

 

4)數據 API 列表:

wx.getStorage 獲取本地數據緩存
wx.getStorageSync 獲取本地數據緩存
wx.setStorage 設置本地數據緩存
wx.setStorageSync 設置本地數據緩存
wx.getStorageInfo 獲取本地緩存的相關信息
wx.getStorageInfoSync 獲取本地緩存的相關信息
wx.removeStorage 刪除本地緩存內容
wx.removeStorageSync 刪除本地緩存內容
wx.clearStorage 清理本地數據緩存
wx.clearStorageSync 清理本地數據緩存

 

5)位置 API 列表:

wx.getLocation 獲取當前位置
wx.chooseLocation 打開地圖選擇位置
wx.openLocation 打開內置地圖
wx.createMapContext 地圖組件控制

 

6)設備 API 列表:

wx.getNetworkType 獲取網路類型
wx.onNetworkStatusChange 監聽網路狀態變化
wx.getSystemInfo 獲取系統信息
wx.getSystemInfoSync 獲取系統信息
wx.onAccelerometerChange 監聽加速度數據
wx.startAccelerometer 開始監聽加速度數據
wx.stopAccelerometer 停止監聽加速度數據
wx.onCompassChange 監聽羅盤數據
wx.startCompass 開始監聽羅盤數據
wx.stopCompass 停止監聽羅盤數據
wx.setClipboardData 設置剪貼板內容
wx.getClipboardData 獲取剪貼板內容
wx.makePhoneCall 撥打電話
wx.scanCode 掃碼

 

7)界面 API 列表:

wx.showToast 顯示提示框
wx.showLoading 顯示載入提示框
wx.hideToast 隱藏提示框
wx.hideLoading 隱藏提示框
wx.showModal 顯示模態彈窗
wx.showActionSheet 顯示菜單列表
wx.setNavigationBarTitle 設置當前頁面標題
wx.showNavigationBarLoading 顯示導航條載入動畫
wx.hideNavigationBarLoading 隱藏導航條載入動畫
wx.navigateTo 新視窗打開頁面
wx.redirectTo 原視窗打開頁面
wx.switchTab 切換到 tabbar 頁面
wx.navigateBack 退回上一個頁面
wx.createAnimation 動畫
wx.createContext 創建繪圖上下文
wx.drawCanvas 繪圖
wx.stopPullDownRefresh 停止下拉刷新動畫

 

8)WXML節點信息 API 列表:

wx.createSelectorQuery 創建查詢請求
selectorQuery.select 根據選擇器選擇單個節點
selectorQuery.selectAll 根據選擇器選擇全部節點
selectorQuery.selectViewport 選擇顯示區域
nodesRef.boundingClientRect 獲取佈局位置和尺寸
nodesRef.scrollOffset 獲取滾動位置
nodesRef.fields 獲取任意欄位
selectorQuery.exec 執行查詢請求

 

9)開放介面:

wx.login 登錄
wx.getUserInfo 獲取用戶信息
wx.chooseAddress 獲取用戶收貨地址
wx.requestPayment 發起微信支付
wx.addCard 添加卡券
wx.openCard 打開卡券

 

3、相關處理代碼

1)註冊程式處理代碼

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

2)註冊頁面處理代碼

//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
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    })
  },
  customData: {
    hi: 'MINA'
  }
})

3)JS函數模塊化

// common.js
function sayHello(name) {
  console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
  console.log(`Goodbye ${name} !`)
}

module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye

在需要使用這些模塊的文件中,使用 require(path) 將公共代碼引入

var common = require('common.js')
Page({
  helloMINA: function() {
    common.sayHello('MINA')
  },
  goodbyeMINA: function() {
    common.sayGoodbye('MINA')
  }
})

 

4)網路數據請求處理代碼

    //點擊搜索按鈕調用的函數
      search:function(e){
        var that = this;

        //數據載入完成之前,顯示載入中提示框
        wx.showToast({
          title: '載入中。。。',
          icon: 'loading',
          duration: 10000
        });

        //發起請求,註意 wx.request發起的是 HTTPS 請求
        wx.request({
          url: url + "?city=" + that.data.inputValue + "&key=" + apiKey,
          data: {},
          header: {
              'content-type': 'application/json'
          },
          success: function(res) {
            var data = res.data;
            //將數據從邏輯層發送到視圖層,同時改變對應的 this.data 的值
            that.setData({
              restation: data.result,
              condition: false
            });
            //數據載入成功後隱藏載入中彈框
            wx.hideToast();
          }
        })

      }

 


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

-Advertisement-
Play Games
更多相關文章
  • (๑´ڡ`๑) 最常用的方式是組合使用構造函數與原型模式,原型模式的思想非常重要,詳細理解 ...
  • 目錄 · 大型網站軟體系統的特點 · 大型網站架構演化發展歷程 · 初始階段的網站架構 · 需求/解決問題 · 架構 · 應用服務和數據服務分離 · 需求/解決問題 · 架構 · 使用緩存改善網站性能 · 需求/解決問題 · 架構 · 使用應用伺服器集群改善網站的併發處理能力 · 需求/解決問題 · ...
  • "DDD理論學習系列——案例及目錄" 1. 引言 DDD中 Repository 這個單詞,主要有兩種翻譯: 資源庫 和 倉儲 ,本文取 倉儲 之譯。 說到倉儲,我們肯定就想到了倉庫,倉庫一般用來存放貨物,而倉庫一般由倉庫管理員來管理。當工廠生產了一批貨物時,只需交給倉庫管理員即可,他負責貨物的堆放 ...
  • namespace StrategyPattern //策略模式 { /// /// 定義所以支持的演算法的公共介面 /// abstract class Strategy { /// /// 演算法方法。 /// public abstract void Algorithm... ...
  • [1]指數運算符 [2]不同進位 [3]Number方法 [4]Number常量 [5]Math對象 ...
  • 一、MVC model (模型層)--view(視圖層)--controller(控制層) 第一步我們把需要展示的數據首先在model (模型層)上綁好; 第二步我們通過controller(控制層)在模型層和視圖層之間建立起一座橋梁; 第三步我們把數據結果渲染到view(視圖層); MVC只是手段 ...
  • jquery獲取json對象中的key小技巧 比如有一個json var json = {"name" : "Tom", "age" : 18}; 想分別獲取它的key 和 value 小技巧來啦 for (var key in json) { console.log(key); //獲取key值 ...
  • 使用JS獲取地址欄參數 方法一: function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&] )(&|$)"); var r = window.location.search.substr(1).match( ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...