WXS|WXS腳本語言
WXS
WXS(WeiXin Script)是小程序的一套腳本語言,結(jié)合 WXML,可以構(gòu)建出頁面的結(jié)構(gòu)。
以下是一些使用 WXS 的簡單示例:
WXS、WXS語言、WXS腳本語言、微信小程序
頁面渲染
<!--wxml--> <wxs module="m1"> var msg = "hello world"; module.exports.message = msg; </wxs> <view> {{m1.message}} </view>
頁面輸出:
hello world
數(shù)據(jù)處理
// page.js Page({ data: { array: [1, 2, 3, 4, 5, 1, 2, 3, 4] } })
<!--wxml--> <!-- 下面的 getMax 函數(shù),接受一個數(shù)組,且返回數(shù)組中最大的元素的值 --> <wxs module="m1"> var getMax = function(array) { var max = undefined; for (var i = 0; i < array.length; ++i) { max = max === undefined ? array[i] : (max >= array[i] ? max : array[i]); } return max; } module.exports.getMax = getMax; </wxs> <!-- 調(diào)用 wxs 里面的 getMax 函數(shù),參數(shù)為 page.js 里面的 array --> <view> {{m1.getMax(array)}} </view>
頁面輸出:
5
框架
小程序開發(fā)框架的目標(biāo)是通過盡可能簡單、高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生 APP 體驗的服務(wù)。
框架提供了自己的視圖層描述語言 WXML 和 WXSS,以及基于 JavaScript 的邏輯層框架,并在視圖層與邏輯層間提供了數(shù)據(jù)傳輸和事件系統(tǒng),可以讓開發(fā)者可以方便的聚焦于數(shù)據(jù)與邏輯上。
響應(yīng)的數(shù)據(jù)綁定
框架的核心是一個響應(yīng)的數(shù)據(jù)綁定系統(tǒng)。
整個系統(tǒng)分為兩塊視圖層(View)和邏輯層(App Service)
框架可以讓數(shù)據(jù)與視圖非常簡單地保持同步。當(dāng)做數(shù)據(jù)修改的時候,只需要在邏輯層修改數(shù)據(jù),視圖層就會做相應(yīng)的更新。
通過這個簡單的例子來看:
<!-- This is our View --> <view> Hello {{name}}! </view> <button bindtap="changeName"> Click me! </button>
// This is our App Service. // This is our data. var helloData = { name: 'WeChat' } // Register a Page. Page({ data: helloData, changeName: function(e) { // sent data change to view this.setData({ name: 'MINA' }) } })
開發(fā)者通過框架將邏輯層數(shù)據(jù)中的 name 與視圖層的 name 進(jìn)行了綁定,所以在頁面一打開的時候會顯示 Hello WeChat!
當(dāng)點(diǎn)擊按鈕的時候,視圖層會發(fā)送 changeName 的事件給邏輯層,邏輯層找到對應(yīng)的事件處理函數(shù)
邏輯層執(zhí)行了 setData 的操作,將 name 從 WeChat 變?yōu)?nbsp;MINA,因為該數(shù)據(jù)和視圖層已經(jīng)綁定了,從而視圖層會自動改變?yōu)?nbsp;Hello MINA! 。
頁面管理
框架 管理了整個小程序的頁面路由,可以做到頁面間的無縫切換,并給以頁面完整的生命周期。開發(fā)者需要做的只是將頁面的數(shù)據(jù),方法,生命周期函數(shù)注冊進(jìn) 框架 中,其他的一切復(fù)雜的操作都交由 框架 處理。
基礎(chǔ)組件
框架 提供了一套基礎(chǔ)的組件,這些組件自帶微信風(fēng)格的樣式以及特殊的邏輯,開發(fā)者可以通過組合基礎(chǔ)組件,創(chuàng)建出強(qiáng)大的微信小程序 。
豐富的 API
框架 提供豐富的微信原生 API,可以方便的調(diào)起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。
基礎(chǔ)組件
框架為開發(fā)者提供了一系列基礎(chǔ)組件,開發(fā)者可以通過組合這些基礎(chǔ)組件進(jìn)行快速開發(fā)。
什么是組件:
組件是視圖層的基本組成單元。
組件自帶一些功能與微信風(fēng)格的樣式。
一個組件通常包括開始標(biāo)簽和結(jié)束標(biāo)簽,屬性用來修飾這個組件,內(nèi)容在兩個標(biāo)簽之內(nèi)。
<tagname property="value"> Content goes here ... </tagname>
注意:所有組件與屬性都是小寫,以連字符-連接
屬性類型
類型 | 描述 | 注解 |
---|---|---|
Boolean | 布爾值 | 組件寫上該屬性,不管該屬性等于什么,其值都為true,只有組件上沒有寫該屬性時,屬性值才為false。如果屬性值為變量,變量的值會被轉(zhuǎn)換為Boolean類型 |
Number | 數(shù)字 | 1, 2.5 |
String | 字符串 | "string" |
Array | 數(shù)組 | [ 1, "string" ] |
Object | 對象 | { key: value } |
EventHandler | 事件處理函數(shù)名 | "handlerName" 是 Page中定義的事件處理函數(shù)名 |
Any | 任意屬性 |
共同屬性類型
所有組件都有的屬性:
屬性名 | 類型 | 描述 | 注解 |
---|---|---|---|
id | String | 組件的唯一標(biāo)示 | 保持整個頁面唯一 |
class | String | 組件的樣式類 | 在對應(yīng)的 WXSS 中定義的樣式類 |
style | String | 組件的內(nèi)聯(lián)樣式 | 可以動態(tài)設(shè)置的內(nèi)聯(lián)樣式 |
hidden | Boolean | 組件是否顯示 | 所有組件默認(rèn)顯示 |
data-* | Any | 自定義屬性 | 組件上觸發(fā)的事件時,會發(fā)送給事件處理函數(shù) |
bind* / catch* | EventHandler | 組件的事件 | 詳見事件 |
特殊屬性
幾乎所有組件都有各自定義的屬性,可以對該組件的功能或樣式進(jìn)行修飾,請參考各個組件的定義。
組件列表
基礎(chǔ)組件分為以下七大類:
視圖容器(View Container):
組件名 | 說明 |
---|---|
view | 視圖容器 |
scroll-view | 可滾動視圖容器 |
swiper | 滑塊視圖容器 |
基礎(chǔ)內(nèi)容(Basic Content):
組件名 | 說明 |
---|---|
icon | 圖標(biāo) |
text | 文字 |
progress | 進(jìn)度條 |
表單(Form):
標(biāo)簽名 | 說明 |
---|---|
button | 按鈕 |
form | 表單 |
input | 輸入框 |
checkbox | 多項選擇器 |
radio | 單項選擇器 |
picker | 列表選擇器 |
picker-view | 內(nèi)嵌列表選擇器 |
slider | 滾動選擇器 |
switch | 開關(guān)選擇器 |
label | 標(biāo)簽 |
導(dǎo)航(Navigation):
組件名 | 說明 |
---|---|
navigator | 應(yīng)用鏈接 |
多媒體(Media):
組件名 | 說明 |
---|---|
audio | 音頻 |
image | 圖片 |
video | 視頻 |
地圖(Map):
組件名 | 說明 |
---|---|
map | 地圖 |
畫布(Canvas):
組件名 | 說明 |
---|---|
canvas | 畫布 |
客服會話:
組件名 | 說明 |
---|---|
contact-button | 進(jìn)入客服會話按鈕 |
API
框架提供豐富的微信原生API,可以方便的調(diào)起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。
說明:
wx.on 開頭的 API 是監(jiān)聽某個事件發(fā)生的API接口,接受一個 CALLBACK 函數(shù)作為參數(shù)。當(dāng)該事件觸發(fā)時,會調(diào)用 CALLBACK 函數(shù)。
如未特殊約定,其他 API 接口都接受一個OBJECT作為參數(shù)。
OBJECT中可以指定success, fail, complete來接收接口調(diào)用結(jié)果。
參數(shù)名 | 類型 | 必填 | 說明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行) |
API列表:
網(wǎng)絡(luò) API 列表:
API | 說明 |
---|---|
wx.request | 發(fā)起網(wǎng)絡(luò)請求 |
wx.uploadFile | 上傳文件 |
wx.downloadFile | 下載文件 |
wx.connectSocket | 創(chuàng)建 WebSocket 連接 |
wx.onSocketOpen | 監(jiān)聽 WebSocket 打開 |
wx.onSocketError | 監(jiān)聽 WebSocket 錯誤 |
wx.sendSocketMessage | 發(fā)送 WebSocket 消息 |
wx.onSocketMessage | 接受 WebSocket 消息 |
wx.closeSocket | 關(guān)閉 WebSocket 連接 |
wx.onSocketClose | 監(jiān)聽 WebSocket 關(guān)閉 |
媒體 API 列表:
API | 說明 |
---|---|
wx.chooseImage | 從相冊選擇圖片,或者拍照 |
wx.previewImage | 預(yù)覽圖片 |
wx.startRecord | 開始錄音 |
wx.stopRecord | 結(jié)束錄音 |
wx.playVoice | 播放語音 |
wx.pauseVoice | 暫停播放語音 |
wx.stopVoice | 結(jié)束播放語音 |
wx.getBackgroundAudioPlayerState | 獲取音樂播放狀態(tài) |
wx.playBackgroundAudio | 播放音樂 |
wx.pauseBackgroundAudio | 暫停播放音樂 |
wx.seekBackgroundAudio | 控制音樂播放進(jìn)度 |
wx.stopBackgroundAudio | 停止播放音樂 |
wx.onBackgroundAudioPlay | 監(jiān)聽音樂開始播放 |
wx.onBackgroundAudioPause | 監(jiān)聽音樂暫停 |
wx.onBackgroundAudioStop | 監(jiān)聽音樂結(jié)束 |
wx.chooseVideo | 從相冊選擇視頻,或者拍攝 |
文件 API 列表:
API | 說明 |
---|---|
wx.saveFile | 保存文件 |
wx.getSavedFileList | 獲取已保存的文件列表 |
wx.getSavedFileInfo | 獲取已保存的文件信息 |
wx.removeSavedFile | 刪除已保存的文件信息 |
wx.openDocument | 打開文件 |
數(shù)據(jù) API 列表:
API | 說明 |
---|---|
wx.getStorage | 獲取本地數(shù)據(jù)緩存 |
wx.getStorageSync | 獲取本地數(shù)據(jù)緩存 |
wx.setStorage | 設(shè)置本地數(shù)據(jù)緩存 |
wx.setStorageSync | 設(shè)置本地數(shù)據(jù)緩存 |
wx.getStorageInfo | 獲取本地緩存的相關(guān)信息 |
wx.getStorageInfoSync | 獲取本地緩存的相關(guān)信息 |
wx.removeStorage | 刪除本地緩存內(nèi)容 |
wx.removeStorageSync | 刪除本地緩存內(nèi)容 |
wx.clearStorage | 清理本地數(shù)據(jù)緩存 |
wx.clearStorageSync | 清理本地數(shù)據(jù)緩存 |
位置 API 列表:
API | 說明 |
---|---|
wx.getLocation | 獲取當(dāng)前位置 |
wx.chooseLocation | 打開地圖選擇位置 |
wx.openLocation | 打開內(nèi)置地圖 |
wx.createMapContext | 地圖組件控制 |
設(shè)備 API 列表:
API | 說明 |
---|---|
wx.getNetworkType | 獲取網(wǎng)絡(luò)類型 |
wx.onNetworkStatusChange | 監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化 |
wx.getSystemInfo | 獲取系統(tǒng)信息 |
wx.getSystemInfoSync | 獲取系統(tǒng)信息 |
wx.onAccelerometerChange | 監(jiān)聽加速度數(shù)據(jù) |
wx.startAccelerometer | 開始監(jiān)聽加速度數(shù)據(jù) |
wx.stopAccelerometer | 停止監(jiān)聽加速度數(shù)據(jù) |
wx.onCompassChange | 監(jiān)聽羅盤數(shù)據(jù) |
wx.startCompass | 開始監(jiān)聽羅盤數(shù)據(jù) |
wx.stopCompass | 停止監(jiān)聽羅盤數(shù)據(jù) |
wx.setClipboardData | 設(shè)置剪貼板內(nèi)容 |
wx.getClipboardData | 獲取剪貼板內(nèi)容 |
wx.makePhoneCall | 撥打電話 |
wx.scanCode | 掃碼 |
界面 API 列表:
API | 說明 |
---|---|
wx.showToast | 顯示提示框 |
wx.showLoading | 顯示加載提示框 |
wx.hideToast | 隱藏提示框 |
wx.hideLoading | 隱藏提示框 |
wx.showModal | 顯示模態(tài)彈窗 |
wx.showActionSheet | 顯示菜單列表 |
wx.setNavigationBarTitle | 設(shè)置當(dāng)前頁面標(biāo)題 |
wx.showNavigationBarLoading | 顯示導(dǎo)航條加載動畫 |
wx.hideNavigationBarLoading | 隱藏導(dǎo)航條加載動畫 |
wx.navigateTo | 新窗口打開頁面 |
wx.redirectTo | 原窗口打開頁面 |
wx.switchTab | 切換到 tabbar 頁面 |
wx.navigateBack | 退回上一個頁面 |
wx.createAnimation | 動畫 |
wx.createContext | 創(chuàng)建繪圖上下文 |
wx.drawCanvas | 繪圖 |
wx.stopPullDownRefresh | 停止下拉刷新動畫 |
WXML節(jié)點(diǎn)信息 API 列表:
API | 說明 |
---|---|
wx.createSelectorQuery | 創(chuàng)建查詢請求 |
selectorQuery.select | 根據(jù)選擇器選擇單個節(jié)點(diǎn) |
selectorQuery.selectAll | 根據(jù)選擇器選擇全部節(jié)點(diǎn) |
selectorQuery.selectViewport | 選擇顯示區(qū)域 |
nodesRef.boundingClientRect | 獲取布局位置和尺寸 |
nodesRef.scrollOffset | 獲取滾動位置 |
nodesRef.fields | 獲取任意字段 |
selectorQuery.exec | 執(zhí)行查詢請求 |
開放接口:
API | 說明 |
---|---|
wx.login | 登錄 |
wx.getUserInfo | 獲取用戶信息 |
wx.chooseAddress | 獲取用戶收貨地址 |
wx.requestPayment | 發(fā)起微信支付 |
wx.addCard | 添加卡券 |
wx.openCard | 打開卡券 |
不能直接操作 Page.data
避免在直接對 Page.data 進(jìn)行賦值修改,請使用 Page.setData 進(jìn)行操作才能將數(shù)據(jù)同步到頁面中進(jìn)行渲染
怎么獲取用戶輸入
能夠獲取用戶輸入的組件,需要使用組件的屬性bindblur將用戶的輸入內(nèi)容同步到 AppService。
<input id="myInput" bindblur="bindBlur" />
var inputContent = {} Page({ data: { inputContent: {} }, bindBlur: function(e) { inputContent[e.currentTarget.id] = e.detail.value } })
為什么腳本內(nèi)不能使用window等對象
頁面的腳本邏輯是在JsCore中運(yùn)行,JsCore是一個沒有窗口對象的環(huán)境,所以不能在腳本中使用window,也無法在腳本中操作組件
為什么 zepto/jquery 無法使用
zepto/jquery 會使用到window對象和document對象,所以無法使用。
wx.navigateTo無法打開頁面
一個應(yīng)用同時只能打開5個頁面,當(dāng)已經(jīng)打開了5個頁面之后,wx.navigateTo不能正常打開新頁面。請避免多層級的交互方式,或者使用wx.redirectTo
樣式表不支持級聯(lián)選擇器
WXSS支持以.開始的類選擇器。如:
.normal_view { color: #000000; padding: 10px; }
可以使用標(biāo)簽選擇器,控制同一類組件的樣式。如:使用input標(biāo)簽選擇器控制<input/>的默認(rèn)樣式。
input { width: 100px; }
本地資源無法通過 WXSS 獲取
background-image:可以使用網(wǎng)絡(luò)圖片,或者 base64,或者使用<image/>標(biāo)簽
如何修改窗口的背景色
使用 page 標(biāo)簽選擇器,可以修改頂層節(jié)點(diǎn)的樣式
page { display: block; min-height: 100%; background-color: red; }
HTTPS 請求不成功
tls 僅支持 1.2 及以上版本
部分 Android 機(jī)型需要 tls1.0 或者 tls1.1,所以請確保服務(wù)器的 tls 版本為 1.0、1.1、1.2
網(wǎng)絡(luò)請求的 referer
網(wǎng)絡(luò)請求的 referer 是不可以設(shè)置的,格式固定為 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 為小程序的 appid,{version} 為小程序的版本號,版本號為 0 表示為開發(fā)版、體驗版以及審核版本,版本號為 devtools 表示為開發(fā)者工具,其余為正式版本。
為什么 map 組件總是在最上層
map、canvas、video、textarea 是由客戶端創(chuàng)建的原生組件,原生組件的層級是最高的,所以頁面中的其他組件無論設(shè)置 z-index 為多少,都無法蓋在原生組件上。 原生組件暫時還無法放在 scroll-view 上,也無法對原生組件設(shè)置 css 動畫。
掃二維碼手機(jī)查看該文章
- 上一篇:微信小程序開發(fā)工具全新上線
- 下一篇:微信公眾號“公眾平臺助手”發(fā)布