微信小程式教程(第四篇)

来源:http://www.cnblogs.com/Voop/archive/2017/01/23/6340427.html
-Advertisement-
Play Games

小程式開發基本框架及其限制與優化 開發基本框架(MINA框架) 開發基本框架(MINA框架) └─ Project-folder/ ·································· 項目所在目錄 ├─ pages/ ·· ...


小程式開發基本框架及其限制與優化

 

  • 開發基本框架(MINA框架)


└─ Project-folder/ ·································· 項目所在目錄

├─ pages/ ······································ 頁面目錄

│ ├─ index/ ··································· index頁面

│ │ ├─ index.js ······························ index頁面邏輯

│ │ ├─ index.wxml ···························· index頁面結構

│ │ └─ index.wxss ···························· index頁面樣式

│ │ └─ index.json ···························· index頁面配置(局部)

│ └─ logs/ ···································· logs頁面

│ ├─ logs.js ······························· logs頁面邏輯

│ ├─ logs.wxml ····························· logs頁面結構

│ └─ logs.wxss ····························· logs頁面樣式

├─ utils/ ······································ 公共腳本目錄

│ └─ util.js ·································· 工具腳本

├─ app.js ······································ 應用程式邏輯  用於定義整個應用的邏輯

用來監聽並處理小程式的生命周期函數、聲明全局變數

├─ app.json ································ 應用程式配置(全局)   對整個小程式的全局配置

配置小程式是由哪些頁面組成,配置小程式的視窗背景色等

└─ app.wxss ······························· 應用程式公共樣式 用來設置整個應用的公共樣式

1.app函數是一個全局函數,用來創建一個應用程式實例,每個應用程式都會有他的生命周期

2.page也是一個全局函數,用來創建頁面對象

3.wxml文件是XML語法,不是HTML語法。簡單來說:wxml ≈ xml + 事件系統 + 模板引擎

4.json文件是配置文件,按需而建。但app.json必須建

5.頁面的所有配置或設置都會優先於全局配置或設置,即局部會覆蓋全局的配置

6.WXSS具有CSS大部分特性,同時進行了擴充及修改。尺寸單位(rpx)可以根據屏幕寬度進行自適應。而目前只支持少量選擇器(.class/#id/element/element, element/::after/::before)

7.每個文件夾內的文件名次統一,只有尾碼名不同,因為json配置文件中最終會將所有的頁面整合成一個頁面,通過相同的名稱,將頁面與邏輯js、樣式進行關聯匹配。

8. 當應用程式啟動時會自動執行項目目錄下的app.js文件,在app.js中通過調用全局App([option])方法創建一個應用程式實例,其中通過參數指定的一些特定的方法,會在特定的執行時機去執行,也就是說通常所說的生命周期事件方法。其中app.js,app.json是必需的。

小程式的生命周期函數

屬性 類型 描述 觸發時機
onLaunch Function 生命周期函數--監聽小程式初始化 當小程式初始化完成時,會觸發 onLaunch(全局只觸發一次)
onShow Function 生命周期函數--監聽小程式顯示 當小程式啟動,或從後臺進入前臺顯示,會觸發 onShow
onHide Function 生命周期函數--監聽小程式隱藏 當小程式從前臺進入後臺,會觸發 onHide
其他 Any 開發者可以添加任意的函數或數據到 Object 參數中,用this 可以訪問  

生命周期函數

  • onLoad: 頁面載入

  • 一個頁面只會調用一次。

  • 接收頁面參數可以獲取wx.navigateTo和wx.redirectTo及<navigator/>中的 query。

  • onShow: 頁面顯示

  • 每次打開頁面都會調用一次。

  • onReady: 頁面初次渲染完成

  • 一個頁面只會調用一次,代表頁面已經準備妥當,可以和視圖層進行交互。

  • 對界面的設置如wx.setNavigationBarTitle請在onReady之後設置。

  • onHide: 頁面隱藏

  • 當navigateTo或底部tab切換時調用。

  • onUnload: 頁面卸載

  • 當redirectTo或navigateBack的時候調用。

頁面的初始數據、生命周期函數、事件處理函數

屬性 類型 描述
data Object 頁面的初始數據
onLoad Function 生命周期函數--監聽頁面載入
onReady Function 生命周期函數--監聽頁面初次渲染完成
onShow Function 生命周期函數--監聽頁面顯示
onHide Function 生命周期函數--監聽頁面隱藏
onUnload Function 生命周期函數--監聽頁面卸載
onPullDownRefresh Function 頁面相關事件處理函數--監聽用戶下拉動作
onReachBottom Function 頁面上拉觸底事件的處理函數
其他 Any 開發者可以添加任意的函數或數據到 object 參數中,在頁面的函數中用 this 可以訪問

頁面的路由

在小程式中所有頁面的路由全部由框架進行管理,對於路由的觸發方式及頁面生命周期函數如下:

路由方式 觸發時機 路由後頁面 路由前頁面
初始化 小程式打開的第一個頁面 onLoad,onShow  
打開新頁面 調用 API wx.navigateTo 或使用組件<navigator /> onLoad,onShow onHide
頁面重定向 調用 API wx.redirectTo 或使用組件<navigator /> onLoad,onShow onUnload
頁面返回 調用 API wx.navigateBack或用戶按左上角返回按鈕 onShow onUnload(多層頁面返回每個頁面都會按順序觸發onUnload)
Tab 切換 多 Tab 模式下用戶切換 Tab 第一次打開 onLoad,onshow;否則 onShow onHide

選擇器

目前支持的選擇器有:

選擇器 樣例 樣例描述
.class .intro 選擇所有擁有 class="intro" 的組件
#id #firstname 選擇擁有 id="firstname" 的組件
element view 選擇所有 view 組件
element, element view, checkbox 選擇所有文檔的 view 組件和所有的 checkbox 組件
::after view::after 在 view 組件後邊插入內容
::before view::before 在 view 組件前邊插入內容

尺寸單位

rpx(responsive pixel): 可以根據屏幕寬度進行自適應。規定屏幕寬為750rpx。如在 iPhone6 上,屏幕寬度為375px,共有750個物理像素,則750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

rem(root em): 規定屏幕寬度為20rem;1rem = (750/20)rpx 。

建議: 開發微信小程式時設計師可以用 iPhone6 作為視覺稿的標準

設備 rpx換算px (屏幕寬度/750) px換算rpx (750/屏幕寬度)
iPhone5 1rpx = 0.42px 1px = 2.34rpx
iPhone6 1rpx = 0.5px 1px = 2rpx
iPhone6 Plus 1rpx = 0.552px 1px = 1.81rpx

javascript限制與優化

(一)限制:

  • 通過傳入字元串來執行代碼的能力都禁用了

出於安全考慮,凡是通過傳入字元串來執行代碼的能力都禁用了。具體被禁掉的原生功能有:new Function、eval、Generator。這是同時也比較有效的避免了類似H5 中xss的問題。

禁掉的這些功能,對我們開發來說影響比較顯著的應該是字元串轉json,以往我們都是通過new Function、eval來處理後臺cgi的返回。(移動端一般封裝在zepto之類的框架中),小程式開發需要改變一下具體實現。

  • 與瀏覽器BOM相關的api都是沒有的。

在這些BOM中,對開發影響最大的應該是沒有cookie。因為其他功能例如storage,小程式有類似的處理方法。而cookie在web開發中是與後臺登錄相關的。小程式中是沒有Cookie的,為了相容目前大部分web app 的登錄管理是使用cookie的。小程式在請求發送時,客戶端可以動態的給請求設置Header發送報文的cookie。

註意一下cookie本身不能在客戶端進行讀寫。因為沒有cookie,H5中的csrf問題理論上是根本解決了。小程式是否存在其他客戶端安全問題,需要技術、時間來檢驗~

(二) 優化

  • 登錄:

H5中,通過微信授權一般採用url重定向的方式獲取code;在小程式中,通過wx.login獲取code,這樣避免了之前登錄重定向的問題。

  • storage:

小程式用storage替代了H5中的localstorage、sessionstorage。storage對每個小程式的大小是10M,支持同步和非同步。

  • 微信支付路徑不再受限

(三) 不便

1)每個頁面是需要手動在app.json中進行註冊。如果沒有註冊,是不執行該頁面的。

2)打開的頁面有5個的限制,在開發時需要主要控制打開頁面的數量

wxss:

  • wxss 不再支持媒體查詢

  • 增加了app的flex佈局

  • 引入rpx的概念

rpx(responsive pixel): 可以根據屏幕寬度進行自適應。規定屏幕寬為750rpx。如在iPhone6上,屏幕寬度為375px,共有750個物理像素,則750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

  • wxss中,不能使用背景圖片。這跟框架的設計思想認為一切皆組件有關

  • wxss動畫不支持(目前)

  • 不支持多層選擇器.classA {} – 支持; .classA  .classB {} – 不支持 (api說明表示只支持單層選擇器,重構測試有時多層是支持的)

(四)index.js中的data數據只讀

頁面js中,data數據是需要約定為只讀。框架是單向數據綁定,修改data中的數據不會自動更新View;更新view,需要使用setData()方法。setData()更新View時,與data中的數據進行Diff比較,不同才會更新。這樣如果直接修改data,很容易造成data中的數據與View不一致。

  • setData單次設置的數據不能超過1024kB,需要避免一次設置過多的數據。

  • template,這些模版具有自己獨立的作用域。

  • 支持ES6中的…展開模塊數據。

     

 

參考引用資料:小程式官方,騰訊雲,騰訊Bugly,微信小程式club的作者【風瀟雨落】

 

下一篇,小程式開發項目實例,測試及發佈

 

歡迎關註公眾號(hongji8410)和加入QQ群一起交流(522342554)

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 數組保存的是一組有順序的、具有相同類型的數據。 1、創建: 數組的聲明格式: int arrary[]; int [] array1, array2; //同時聲明多個數組。 上面的語句只是對數組進行了聲明,還沒有對其分配記憶體,不可存放、訪問。Java中數組可以看做是一種特殊的對象,可用new對數組 ...
  • 高級語言程式設計報告 列印版報告截止上交日期:2014年11 月 15 日 電子版報告發至[email protected], 郵件標題寫明報告次數序號姓名 序號 34 姓名 許愷 照片 成績 E-MAIL及電話 18810556775 實習題目 第一次作業: 函數 任務六 一、 代碼及註釋 //編 ...
  • Spring boot是Spring推出的一個輕量化web框架,主要解決了Spring對於小型項目飽受詬病的配置和開發速度問題。 Spring Boot 包含的特性如下: 創建可以獨立運行的 Spring 應用。 直接嵌入 Tomcat 或 Jetty 伺服器,不需要部署 WAR 文件。 提供推薦的 ...
  • 轉發註明出處:http://www.cnblogs.com/0zcl/p/6259128.html,這次博客寫了很久~~ 一、需求 1. 用戶加密認證 (完成)2. 允許同時多用戶登錄 (完成)3. 每個用戶有自己的家目錄 ,且只能訪問自己的家目錄(完成)4. 對用戶進行磁碟配額,每個用戶的可用空間 ...
  • 今天呢,給大家來講一下抽象工廠模式,說到這裡,大家會想到好多種關於工廠的模式,前面已經講了兩種了 簡單工廠模式和工廠方法模式。好,下麵我們來看一下抽象工廠模式。 同樣,我們來舉一個案例 一、案例 我們在做項目的時候,肯定會與資料庫打交道,那麼我們用簡單的控制台應用程式來模擬一個向SqlServer數 ...
  • Chapter 17 數據局部性 通過合理組織數據利用CPU緩存機制來加快記憶體訪問速度。 數據局部性:多級緩存加快了最近訪問過的數據的鄰近記憶體的訪問速度,保持數據位於連續的記憶體中可以提高性能。 找到出現性能問題的地方,不要把時間浪費在非頻繁執行的代碼上。 為了做到緩存友好,可能會犧牲繼承、介面等這些 ...
  • 在C++的世界里構建一個序列化框架;並非一件困難的事情,但也並非簡單。因此,需要分成兩部分來完成這項任務: 1、序列化容器。 2、序列化方式。 前者,很容易理解;但也決定著我們將要存儲數據的方式:二進位抑或其他。二進位方式,很容易想到和使用的方式;但也最容易以極不安全的方式去使用;因為,為了各種原因 ...
  • Chapter 14 組件模式 允許一個單一的實體跨越多個不同域而不會導致耦合。 為實現兩個類之間的代碼共用,應該讓他們擁有同一個類的實例,而不是繼承同一個類。 使用情境: 分割不同的域: 1 class InputComponent 2 { 3 4 public: 5 void update(Bj ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...