微信小程序賬號與工具
在線文檔:https://mp.weixin.qq.com/debug/wxadoc/dev/
小程序開發者賬號注冊
微信公眾平臺:https://mp.weixin.qq.com/
小程序開發者賬號注冊:https://mp.weixin.qq.com/wxopen/waregister?action=step1
微信開發者工具
微信開發者工具:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html
微信小程序文件結構
主體文件結構
主體部分由三個文件組成,必須放在項目的根目錄,如下:
文件 | 必填 | 作用 |
---|---|---|
app.js | 是 | 小程序邏輯 |
app.json | 是 | 小程序公共設置 |
app.wxss | 否 | 小程序公共樣式表 |
頁面文件結構
頁面由四個文件組成,分別是:
文件類型 | 必填 | 作用 |
---|---|---|
js | 是 | 頁面邏輯 ( 微信小程序沒有window和document對象 ) |
wxml | 是 | 頁面結構 ( XML語法,不是HTML語法 ) |
wxss | 否 | 頁面樣式表 ( 拓展了rpx尺寸單位,微信專屬響應式像素 ) |
json | 否 | 頁面配置 ( 不能寫注釋,否則編譯報錯 ) |
<img src="./img/fileTree.png" />
微信小程序配置
app.json 配置項列表
app.json
文件用來對微信小程序進行全局配置,決定頁面文件的路徑、窗口表現、設置網絡超時時間、設置多 tab 等。
屬性 | 類型 | 必填 | 描述 |
---|---|---|---|
pages | String Array | 是 | 設置頁面路徑 |
window | Object | 否 | 設置默認頁面的窗口表現 |
tabBar | Object | 否 | 設置底部 tab 的表現 |
debug | Boolean | 否 | 設置是否開啟 debug 模式 |
window配置
用于設置小程序的狀態欄、導航條、標題、窗口背景色。
注意:頁面的
.json
只能設置window
相關的配置項,以決定本頁面的窗口表現,所以無需寫window
這個鍵。
屬性 | 類型 | 默認值 | 描述 |
---|---|---|---|
navigationBarBackgroundColor | HexColor | #000000 | 導航欄背景顏色,如"#000000" |
navigationBarTextStyle | String | white | 導航欄標題顏色,僅支持 black/white |
navigationBarTitleText | String | 導航欄標題文字內容 | |
backgroundColor | HexColor | #ffffff | 窗口的背景色 |
backgroundTextStyle | String | dark | 下拉背景字體、loading 圖的樣式,僅支持 dark/light |
enablePullDownRefresh | Boolean | false | 是否開啟下拉刷新,詳見頁面相關事件處理函數。 |
onReachBottomDistance | Number | 50 | 頁面上拉觸底事件觸發時距頁面底部距離,單位為px |
<img src="./img/config.jpg" />
tabBar
如果小程序是一個多 tab 應用(客戶端窗口的底部或頂部有 tab 欄可以切換頁面),可以通過 tabBar 配置項指定 tab 欄的表現,以及 tab 切換時顯示的對應頁面。
Tip:
- 當設置 position 為 top 時,將不會顯示 icon。
- tabBar 中的 list 是一個數組,只能配置最少2個、最多5個 tab,tab 按數組的順序排序。
屬性說明:
屬性 | 類型 | 必填 | 默認值 | 描述 |
---|---|---|---|---|
color | HexColor | 是 | tab 上的文字默認顏色 | |
selectedColor | HexColor | 是 | tab 上的文字選中時的顏色 | |
backgroundColor | HexColor | 是 | tab 的背景色 | |
borderStyle | String | 否 | black | tabbar上邊框的顏色, 僅支持 black/white |
list | Array | 是 | tab 的列表,詳見 list 屬性說明,最少2個、最多5個 tab | |
position | String | 否 | bottom | 可選值 bottom、top,設置成top是無圖標 |
其中 list 接受一個數組,數組中的每個項都是一個對象,其屬性值如下:
屬性 | 類型 | 必填 | 說明 |
---|---|---|---|
pagePath | String | 是 | 頁面路徑,必須在 pages 中先定義 |
text | String | 是 | tab 上按鈕文字 |
iconPath | String | 否 | 圖片路徑,icon 大小限制為40kb,建議尺寸為 81px * 81px,當 postion 為 top 時,此參數無效 |
selectedIconPath | String | 否 | 選中時的圖片路徑,icon 大小限制為40kb,建議尺寸為 81px * 81px ,當 postion 為 top 時,此參數無效 |
圖示:
<img src="./img/tabBar.png" />
微信小程序組件(標簽)
組件文檔:https://mp.weixin.qq.com/debug/wxadoc/dev/component/
常用布局標簽
<view></view> 相當于 <div></div>
<text></text> 相當于 <span></span>
<image></image> 相當于 <img />
<navigator></navigator> 相當于 <a></a>
<block></block> 區塊標簽,不會渲染到頁面
注意:image組件默認寬度300px、高度225px,很多時候我們都不需要這個默認寬高,記得手動設置寬高
常用表單標簽
<button></button>
<input type="text" />
<checkbox />
<radio/>
輪播圖組件
<swiper indicator-dots="是否顯示面板指示點" autoplay="是否自動切換" interval="自動切換時間間隔" duration="滑動動畫時長">
<swiper-item>
<image src="圖片路徑1" width="375" height="150"/>
</swiper-item>
<swiper-item>
<image src="圖片路徑2" width="375" height="150"/>
</swiper-item>
</swiper>
探索:實現無縫輪播怎么辦?
微信小程序頁面函數
生命周期函數
Page({
/** 頁面的初始數據 */
data: {
},
/** 生命周期函數--監聽頁面加載 */
onLoad: function (options) {
},
/** 生命周期函數--監聽頁面初次渲染完成 */
onReady: function () {
},
/** 生命周期函數--監聽頁面顯示 */
onShow: function () {
},
/** 生命周期函數--監聽頁面隱藏 */
onHide: function () {
},
/** 生命周期函數--監聽頁面卸載 */
onUnload: function () {
}
})
頁面相關事件處理函數
/** 頁面相關事件處理函數--監聽用戶下拉動作 */
onPullDownRefresh: function () {
},
/** 頁面上拉觸底事件的處理函數 */
onReachBottom: function () {
},
/** 用戶點擊右上角分享 */
onShareAppMessage: function () {
}
WXML 布局
數據綁定 {{ }}
<!--wxml-->
<view> {{message}} </view>
// page.js
Page({
data: {
message: 'Hello MINA!'
}
})
特別注意
- 花括號和引號之間不能有空格
- 不要直接寫 checked="false",其計算結果是一個字符串,轉成 boolean 類型后代表真值。
<checkbox checked="false"> </checkbox> 其計算結果是一個字符串,轉成 boolean 類型后變成了 true
<checkbox checked="{{false}}"> </checkbox> 正確寫法
列表渲染 wx:for
<!--wxml-->
<view wx:for="{{array}}"> {{item}} </view>
// page.js
Page({
data: {
array: [1, 2, 3, 4, 5]
}
})
wx:key 提高列表渲染時排序的效率
wx:key
的值以兩種形式提供
- 字符串,代表在 for 循環的 array 中 item 的某個 property,該 property 的值需要是列表中唯一的字符串或數字,且不能動態改變。
- 保留關鍵字
*this
代表在 for 循環中的 item 本身,這種表示需要 item 本身是一個唯一的字符串或者數字。
條件渲染 wx:if wx:else wx:elif
<!--wxml-->
<view wx:if="{{length >= 80}}"> 優秀 </view>
<view wx:elif="{{length >= 60}}"> 良好 </view>
<view wx:else> 加油 </view>
// page.js
Page({
data: {
length: '95'
}
})
wx:if
與 hidden
區別
wx:if
是否渲染, hidden
是否隱藏。
一般來說,wx:if
有更高的切換消耗而 hidden
有更高的初始渲染消耗。
因此,如果需要頻繁切換的情景下,用 hidden
更好。
事件
- 事件對象可以獲取額外信息,如 id, dataset(自定義屬性集合), touches(觸摸點坐標)。
事件綁定和冒泡
- 冒泡事件 bind事件類型 如
bindtap
bindlongpress
- 非冒泡事件 catch事件類型 如
catchtap
catchlongpress
常用事件類型
類型 | 觸發條件 |
---|---|
tap | 手指觸摸后馬上離開 |
longpress | 手指觸摸后,超過350ms再離開,如果指定了事件回調函數并觸發了這個事件,tap事件將不被觸發 |
<!--wxml-->
<view data-index="自定義屬性" bindtap="tapHandle"> 點我觸發事件 </view>
// page.js
Page({
tapHandle: function(event) {
console.log(event)
}
})
事件傳參注意
小程序綁定事件只能寫函數名稱,不能通過括號方式傳參。
<!--wxml-->
<view bindtap="tapHandle(520)"> 點我觸發事件 </view> 錯誤,事件不能觸發
<view data-index="520" bindtap="tapHandle"> 點我觸發事件 </view>
// page.js
Page({
tapHandle: function(event) {
console.log( event.target.dataset.index ); // 輸出標簽自定義屬性上的index值
}
})
WXS 腳本
WXS(WeiXin Script)是小程序的一套腳本語言,功能類似<script>
標簽,用于在視圖層定義函數(比較少用)。
<!--wxml-->
<wxs module="foo">
var sum = function(a,b){
return a+b;
};
// 這里可以導出一個對象,這個對象可以直接在界面上使用
module.exports.sum = sum;
</wxs>
<view> {{foo.sum}} </view>
WXSS 樣式
WXSS(WeiXin Style Sheets)是一套樣式語言。
與 CSS 相比,WXSS 擴展以下2個特性:
- 尺寸單位 rpx ( responsive pixel 響應式像素)
- 樣式導入 @import "樣式表路徑";
常用快捷鍵
快捷鍵 | 說明 |
---|---|
shift + alt + F | 格式化代碼 |
ctrl + P | 跳到文件 |
ctrl + E | 跳到最近文件 |