小程式從入門到開發
一、什麼是小程式?
微信小程式,小程式的一種,英文名Wechat Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,使用者掃一掃或搜一下即可開啟應用。
https://mp.weixin.qq.com/cgi-bin/wx
二、開發工具
1.小程式開發者工具
這個工具整合了公眾號網頁除錯和小程式除錯兩種開發模式。我這裡使用了Beta版本,沒有用正式版。因為我想體驗使用其中的Git版本管理功能。下載地址:
https://developers.weixin.qq.com/miniprogram/dev/devtools/beta.html
下載安裝好後,先要微信掃描登入。然後選擇小程式專案。
新建小程式專案。
選擇新建小程式的專案目錄,AppID沒有註冊的話,可以先點選下面的使用測試號即可,不影響開發。
大致的工具介面如下圖,新版有版本管理。紅色圈起來的為小程式專案的一個頁面包含的元素:
工具用起來很方便、簡單、直接。詳細用法就不說了,主要的功能大概說下。左側是模擬器,可以模擬安卓手機和蘋果手機的效果,因為有些小程式元件在安卓和蘋果上顯示是有區別的,大家可以注意下。圈紅的為小程式一個頁面的基本組成檔案元素:xx.js、xx.wxml、xx.wxss、xx.json。其實就是有JS檔案、HTML檔案(xx.wxml)、CSS樣式檔案(xx.wxss)和配置檔案(xx.json)組成,非常的容易理解。我們就是在使用小程式的元件、控制元件來繪製UI佈局,主要是xx.wxml和xx.wxss檔案。xx.js負責生命週期函式和事件處理,例如:點選事件、資料請求、資料繫結等等邏輯操作。
我們在編寫完後,可以點選工具欄上的預覽按鈕,掃描二維碼在真機上體驗,也可以直接用左側的模擬器時時預覽即可。
看完了工具,我們看下基本開發的要素和需要注意的問題吧,以免新手再次重蹈覆轍。
2.檔案目錄結構
看下預設的新建後的結構:
app.json是小程式全域性配置檔案,包括了小程式的所有頁面路徑、介面表現、網路超時時間、底部 tab 等。
大致程式碼結構如下:
{
"pages":[
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
}
pages是配置小程式所有頁面,類似於註冊清單。window是全域性的視窗配置,如顏色、標題等等。當然每個頁面也可以自己單獨配置,就是頁面名稱.json檔案。例如:page.json。不過需要注意的是,單獨頁面配置的json無需寫window這個關鍵字,直接如下程式碼所示:
{
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#34495e",
"navigationBarTitleText": "日記",
"navigationBarTextStyle": "white",
"enablePullDownRefresh": true,
"backgroundColor": "#34495e"
}
那麼再看工具配置檔案project.config.json。
通常大家在使用一個工具的時候,都會針對各自喜好做一些個性化配置,例如介面顏色、編譯配置等等,當你換了另外一臺電腦重新安裝工具的時候,你還要重新配置。考慮到這點,小程式開發者工具在每個專案的根目錄都會生成一個 project.config.json,你在工具上做的任何配置都會寫入到這個檔案,當你重新安裝工具或者換電腦工作時,你只要載入同一個專案的程式碼包,開發者工具就自動會幫你恢復到當時你開發專案時的個性化配置,其中會包括編輯器的顏色、程式碼上傳時自動壓縮等等一系列選項。具體詳細配置大家可以看小程式官方文件有詳細介紹。
還有一個app.wxss和app.js。這個app.wxss就是全域性的樣式檔案,也就是css檔案,當然和頁面配置檔案一樣,每個頁面可以單獨寫頁面名稱.wxss。
WXSS 具有 CSS 大部分的特性,小程式在 WXSS 也做了一些擴充和修改。
新增了尺寸單位。在寫 CSS 樣式時,開發者需要考慮到手機裝置的螢幕會有不同的寬度和裝置畫素比,採用一些技巧來換算一些畫素單位。WXSS 在底層支援新的尺寸單位 rpx ,開發者可以免去換算的煩惱,只要交給小程式底層來換算即可,由於換算採用的浮點數運算,所以運算結果會和預期結果有一點點偏差。
提供了全域性的樣式和區域性樣式。和前邊 app.json, page.json 的概念相同,你可以寫一個 app.wxss 作為全域性樣式,會作用於當前小程式的所有頁面,區域性頁面樣式 page.wxss 僅對當前頁面生效。
此外 WXSS 僅支援部分 CSS 選擇器
再來看app.js,很明顯是一個js檔案。負責UI互動、資料繫結更新、網路請求、頁面生命週期等等操作相關的都在這裡。當然每個頁面都有自己單獨的.js檔案,這個app.js可以做一些需要全域性共享和操作的邏輯在裡面。在這裡可以呼叫微信小程式的很多API,也可以自己寫js方法使用。
那麼我們看下一個頁面的組成,基本上就是下圖這些結構元素。有介面、有樣式、有js互動、有配置。
每新增一個頁面都要在app.json裡新增註冊進去。
一個.js檔案裡有生命週期的管理函式,可以在這裡面做相應的操作。
Page({
/**
* 頁面的初始資料
*/
data: {
},
/**
* 生命週期函式--監聽頁面載入
*/
onLoad: function (options) {
},
/**
* 生命週期函式--監聽頁面初次渲染完成
*/
onReady: function () {
},
/**
* 生命週期函式--監聽頁面顯示
*/
onShow: function () {
},
/**
* 生命週期函式--監聽頁面隱藏
*/
onHide: function () {
},
/**
* 生命週期函式--監聽頁面解除安裝
*/
onUnload: function () {
},
/**
* 頁面相關事件處理函式--監聽使用者下拉動作*/
onPullDownRefresh: function () {
},
/**
* 頁面上拉觸底事件的處理函式
*/
onReachBottom: function () {
},
/**
* 使用者點選右上角分享
*/
onShareAppMessage: function () {
}
})
我們看下最簡單的一個index.wxml頁面,可以當做是Html頁面,只有一個text控制元件,裡面的bindtap就是點選事件的繫結。
<!--index.wxml-->
<view class="container">
<view class="usermotto">
<text class="user-motto" bindtap='click'>{{motto}}</text>
</view>
</view>
那麼這個class就是index.wxss裡的樣式檔案。裡面的{{motto}}就是指向index.js裡的data裡定義的一個變數。小程式都是通過{{…}}兩個大括號包括一個英文名字來進行變數繫結的。這樣我們就可以動態更換裡面的顯示內容了。那麼怎麼更新內容呢?
在js裡使用下面的this.setData方式動態更新重新整理資料:
this.setData({ motto: "名字" })
/**index.wxss**/
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
}
.userinfo-avatar {
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.userinfo-nickname {
color: #aaa;
}
.usermotto {
margin-top: 200px;
}
再看下index.js檔案。
//index.js
//獲取應用例項
const app = getApp()
Page({
data: {
motto: 'Hello World',
},
//事件處理函式
click: function() {
wx.navigateTo({
url: '../logs/logs'
})
},
})
Page函式是必須要有的,裡面包含data:{ … },用於放置資料、常量、變數等等。這裡的click:function就是我們定義的點選事件。wx.navigateTo…方法就是小程式的官方API,具體其他API的用法和返回引數是什麼可以看官方API文件,很詳細。
觀察下,上面有個宣告瞭app這個常量。這個就是app.js裡拿到的全域性管理呼叫app.js裡的方法和常量用的。很多需要儲存和全域性讀寫、處理的都可以進行操作以及放置在app.js裡。在 JavaScript 檔案中宣告的變數和函式只在該檔案中有效;不同的檔案中可以宣告相同名字的變數和函式,不會互相影響。通過全域性函式 getApp() 可以獲取全域性的應用例項,如果需要全域性的資料可以在 App() 中設定。
Page({
data: { // 參與頁面渲染的資料
logs: []
},
onLoad: function () {
// 頁面渲染後執行
}
})
小程式的元件和控制元件有很多,可以看做是Html的標籤,對稱方式使用。具體元件特性看官方文件:
https://developers.weixin.qq.com/miniprogram/dev/component/
3.頁面生命週期
頁面的生命週期,這個比較重要,大家可以看下理解下。
看下邏輯層需要注意的。除了頁面的生命週期,還有頁面的監聽事件。onPullDownRefresh():監聽使用者下拉重新整理事件。
需要在app.json的window選項中或頁面配置中開啟enablePullDownRefresh。
可以通過wx.startPullDownRefresh觸發下拉重新整理,呼叫後觸發下拉重新整理動畫,效果與使用者手動下拉重新整理一致。
當處理完資料重新整理後,wx.stopPullDownRefresh可以停止當前頁面的下拉重新整理。
onReachBottom():監聽使用者上拉觸底事件。可以在app.json的window選項中或頁面配置中設定觸發距離onReachBottomDistance,預設為50px。
在觸發距離內滑動期間,本事件只會被觸發一次。
onPageScroll(Object):監聽使用者滑動頁面事件。
onShareAppMessage(Object):
監聽使用者點選頁面內轉發按鈕( 元件 open-type=“share”)或右上角選單“轉發”按鈕的行為,並自定義轉發內容。
注意:只有定義了此事件處理函式,右上角選單才會顯示“轉發”按鈕。
onTabItemTap(Object):點選 tab 時觸發。
Page.prototype.setData(Object data, Function callback):setData 函式用於將資料從邏輯層傳送到檢視層(非同步),同時改變對應的 this.data 的值(同步)。
Object 以 key: value 的形式表示,將 this.data 中的 key 對應的值改變成 value。
其中 key 可以以資料路徑的形式給出,支援改變陣列中的某一項或物件的某個屬性,如 array[2].message,a.b.c.d,並且不需要在 this.data 中預先定義。
注意:
直接修改 this.data 而不呼叫 this.setData 是無法改變頁面的狀態的,還會造成資料不一致。
僅支援設定可 JSON 化的資料。
單次設定的資料不能超過1024kB,請儘量避免一次設定過多的資料。
請不要把 data 中任何一項的 value 設為 undefined ,否則這一項將不被設定並可能遺留一些潛在問題。
4.路由跳轉
接下來看下小程式裡的路由、跳轉。
主要有這幾種方式:
這幾種方式url都可以傳遞引數。
wx.navigateTo:保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack可以返回到原頁面。注意:目前頁面路徑最多隻能十層。
wx.redirectTo(OBJECT):關閉當前頁面,跳轉到應用內的某個頁面。如果你想讓頁面沒有返回按鈕,不能返回的話,就用這個跳轉方式吧。
wx.reLaunch(OBJECT):關閉所有頁面,開啟到應用內的某個頁面。
wx.switchTab(OBJECT):跳轉到 tabBar 頁面,並關閉其他所有非 tabBar 頁面。
wx.navigateBack(OBJECT):關閉當前頁面,返回上一頁面或多級頁面。可通過 getCurrentPages() 獲取當前的頁面棧,決定需要返回幾層。
注意:
1、navigateTo, redirectTo 只能開啟非 tabBar 頁面。
2、switchTab 只能開啟 tabBar 頁面。
3、reLaunch 可以開啟任意頁面。
4、頁面底部的 tabBar 由頁面決定,即只要是定義為 tabBar 的頁面,底部都有 tabBar。
5、呼叫頁面路由帶的引數可以在目標頁面的onLoad中獲取。
相關文章
- 微信小程式開發框架從入門到放棄微信小程式框架
- 微信小程式從入坑到入門微信小程式
- Taro 小程式 從入門到放棄!
- 小程式從入門到實戰系列(一)
- 微信小程式從入門到放棄 Num.2微信小程式
- 微信小程式從入門到放棄 Num.1微信小程式
- scala 從入門到入門+
- makefile從入門到入門
- 前端開發神器Charles從入門到解除安裝前端
- 《Golang 從入門到跑路》之開發環境搭建Golang開發環境
- 併發程式設計從入門到放棄系列開始和結束程式設計
- Taro小程式跨端開發入門實戰跨端
- 微信小程式開發之https從無到有微信小程式HTTP
- 龍蜥開發者說:從入坑到入門 | 第 2 期
- 智慧合約從入門到精通:JIDE整合開發工具IDE
- IOS開發Swift程式設計從入門到精通(視訊教程14G)iOSSwift程式設計
- 微信小程式入門到實戰(三)微信小程式
- 對標小程式 ? "快應用"開發入門指南
- 《Python程式設計:從入門到實踐》Python程式設計
- Android Camera 程式設計從入門到精通Android程式設計
- kafka從入門到關門Kafka
- SAP OData 開發從入門到提高教程的目錄
- 小程式入門
- WebSocket 從入門到寫出開源庫Web
- MyBatis從入門到精通(一):MyBatis入門MyBatis
- Promise從入門到精通Promise
- LESS從入門到精通
- Git 從入門到精通Git
- babel從入門到跑路Babel
- SAP從入門到精通
- Python從入門到精通Python
- Thymeleaf從入門到精通
- Eclipse從入門到精通Eclipse
- SA:從入門到入土
- Jdbc從入門到入土JDBC
- vim從入門到精通
- Shell從入門到精通
- Python 程式設計從入門到實踐5Python程式設計