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