資訊動態(tài)

WXS|WXS腳本語言

日期:2017-08-31 作者:管理員 來源:互聯(lián)網(wǎng)

WXS

WXS(WeiXin Script)是小程序的一套腳本語言,結(jié)合 WXML,可以構(gòu)建出頁面的結(jié)構(gòu)。

以下是一些使用 WXS 的簡單示例:


WXS,WXS語言,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ā)框架的目標是通過盡可能簡單、高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生 APP 體驗的服務。

框架提供了自己的視圖層描述語言 WXML 和 WXSS,以及基于 JavaScript 的邏輯層框架,并在視圖層與邏輯層間提供了數(shù)據(jù)傳輸和事件系統(tǒng),可以讓開發(fā)者可以方便的聚焦于數(shù)據(jù)與邏輯上。

響應的數(shù)據(jù)綁定

框架的核心是一個響應的數(shù)據(jù)綁定系統(tǒng)。

整個系統(tǒng)分為兩塊視圖層(View)和邏輯層(App Service)

框架可以讓數(shù)據(jù)與視圖非常簡單地保持同步。當做數(shù)據(jù)修改的時候,只需要在邏輯層修改數(shù)據(jù),視圖層就會做相應的更新。

通過這個簡單的例子來看:

<!-- 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 進行了綁定,所以在頁面一打開的時候會顯示 Hello WeChat!

  • 當點擊按鈕的時候,視圖層會發(fā)送 changeName 的事件給邏輯層,邏輯層找到對應的事件處理函數(shù)

  • 邏輯層執(zhí)行了 setData 的操作,將 name 從 WeChat 變?yōu)?nbsp;MINA,因為該數(shù)據(jù)和視圖層已經(jīng)綁定了,從而視圖層會自動改變?yōu)?nbsp;Hello MINA! 。

頁面管理

框架 管理了整個小程序的頁面路由,可以做到頁面間的無縫切換,并給以頁面完整的生命周期。開發(fā)者需要做的只是將頁面的數(shù)據(jù),方法,生命周期函數(shù)注冊進 框架 中,其他的一切復雜的操作都交由 框架 處理。

基礎組件

框架 提供了一套基礎的組件,這些組件自帶微信風格的樣式以及特殊的邏輯,開發(fā)者可以通過組合基礎組件,創(chuàng)建出強大的微信小程序 。

豐富的 API

框架 提供豐富的微信原生 API,可以方便的調(diào)起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。


基礎組件

框架為開發(fā)者提供了一系列基礎組件,開發(fā)者可以通過組合這些基礎組件進行快速開發(fā)。

什么是組件:

  • 組件是視圖層的基本組成單元。

  • 組件自帶一些功能與微信風格的樣式。

  • 一個組件通常包括開始標簽和結(jié)束標簽,屬性用來修飾這個組件,內(nèi)容在兩個標簽之內(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 組件的唯一標示 保持整個頁面唯一
class String 組件的樣式類 在對應的 WXSS 中定義的樣式類
style String 組件的內(nèi)聯(lián)樣式 可以動態(tài)設置的內(nèi)聯(lián)樣式
hidden Boolean 組件是否顯示 所有組件默認顯示
data-* Any 自定義屬性 組件上觸發(fā)的事件時,會發(fā)送給事件處理函數(shù)
bind* / catch* EventHandler 組件的事件 詳見事件

特殊屬性

幾乎所有組件都有各自定義的屬性,可以對該組件的功能或樣式進行修飾,請參考各個組件的定義。

組件列表

基礎組件分為以下七大類:

視圖容器(View Container):

組件名 說明
view 視圖容器
scroll-view 可滾動視圖容器
swiper 滑塊視圖容器

基礎內(nèi)容(Basic Content):

組件名 說明
icon 圖標
text 文字
progress 進度條

表單(Form):

標簽名 說明
button 按鈕
form 表單
input 輸入框
checkbox 多項選擇器
radio 單項選擇器
picker 列表選擇器
picker-view 內(nèi)嵌列表選擇器
slider 滾動選擇器
switch 開關(guān)選擇器
label 標簽

導航(Navigation):

組件名 說明
navigator 應用鏈接

多媒體(Media):

組件名 說明
audio 音頻
image 圖片
video 視頻

地圖(Map):

組件名 說明
map 地圖

畫布(Canvas):

組件名 說明
canvas 畫布

客服會話:

組件名 說明
contact-button 進入客服會話按鈕



API

框架提供豐富的微信原生API,可以方便的調(diào)起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。

說明:

  • wx.on 開頭的 API 是監(jiān)聽某個事件發(fā)生的API接口,接受一個 CALLBACK 函數(shù)作為參數(shù)。當該事件觸發(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)絡 API 列表:

API 說明
wx.request 發(fā)起網(wǎng)絡請求
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 預覽圖片
wx.startRecord 開始錄音
wx.stopRecord 結(jié)束錄音
wx.playVoice 播放語音
wx.pauseVoice 暫停播放語音
wx.stopVoice 結(jié)束播放語音
wx.getBackgroundAudioPlayerState 獲取音樂播放狀態(tài)
wx.playBackgroundAudio 播放音樂
wx.pauseBackgroundAudio 暫停播放音樂
wx.seekBackgroundAudio 控制音樂播放進度
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ù)據(jù)緩存
wx.setStorageSync 設置本地數(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 獲取當前位置
wx.chooseLocation 打開地圖選擇位置
wx.openLocation 打開內(nèi)置地圖
wx.createMapContext 地圖組件控制

設備 API 列表:

API 說明
wx.getNetworkType 獲取網(wǎng)絡類型
wx.onNetworkStatusChange 監(jiān)聽網(wǎng)絡狀態(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 設置剪貼板內(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 設置當前頁面標題
wx.showNavigationBarLoading 顯示導航條加載動畫
wx.hideNavigationBarLoading 隱藏導航條加載動畫
wx.navigateTo 新窗口打開頁面
wx.redirectTo 原窗口打開頁面
wx.switchTab 切換到 tabbar 頁面
wx.navigateBack 退回上一個頁面
wx.createAnimation 動畫
wx.createContext 創(chuàng)建繪圖上下文
wx.drawCanvas 繪圖
wx.stopPullDownRefresh 停止下拉刷新動畫

WXML節(jié)點信息 API 列表:

API 說明
wx.createSelectorQuery 創(chuàng)建查詢請求
selectorQuery.select 根據(jù)選擇器選擇單個節(jié)點
selectorQuery.selectAll 根據(jù)選擇器選擇全部節(jié)點
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 進行賦值修改,請使用 Page.setData 進行操作才能將數(shù)據(jù)同步到頁面中進行渲染

怎么獲取用戶輸入

能夠獲取用戶輸入的組件,需要使用組件的屬性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中運行,JsCore是一個沒有窗口對象的環(huán)境,所以不能在腳本中使用window,也無法在腳本中操作組件

為什么 zepto/jquery 無法使用

zepto/jquery 會使用到window對象和document對象,所以無法使用。

wx.navigateTo無法打開頁面

一個應用同時只能打開5個頁面,當已經(jīng)打開了5個頁面之后,wx.navigateTo不能正常打開新頁面。請避免多層級的交互方式,或者使用wx.redirectTo

樣式表不支持級聯(lián)選擇器

WXSS支持以.開始的類選擇器。如:

.normal_view { color: #000000; padding: 10px;
}

可以使用標簽選擇器,控制同一類組件的樣式。如:使用input標簽選擇器控制<input/>的默認樣式。

input { width: 100px;
}

本地資源無法通過 WXSS 獲取

background-image:可以使用網(wǎng)絡圖片,或者 base64,或者使用<image/>標簽

如何修改窗口的背景色

使用 page 標簽選擇器,可以修改頂層節(jié)點的樣式

page { display: block; min-height: 100%; background-color: red;
}

HTTPS 請求不成功

  1. tls 僅支持 1.2 及以上版本

  2. 部分 Android 機型需要 tls1.0 或者 tls1.1,所以請確保服務器的 tls 版本為 1.0、1.1、1.2

網(wǎng)絡請求的 referer

網(wǎng)絡請求的 referer 是不可以設置的,格式固定為 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 為小程序的 appid,{version} 為小程序的版本號,版本號為 0 表示為開發(fā)版、體驗版以及審核版本,版本號為 devtools 表示為開發(fā)者工具,其余為正式版本。

為什么 map 組件總是在最上層

map、canvas、video、textarea 是由客戶端創(chuàng)建的原生組件,原生組件的層級是最高的,所以頁面中的其他組件無論設置 z-index 為多少,都無法蓋在原生組件上。 原生組件暫時還無法放在 scroll-view 上,也無法對原生組件設置 css 動畫。


二維碼
掃二維碼手機查看該文章
當前網(wǎng)址:http://yngytx.cn/wechat/447.html

相關(guān)資訊

?
Copyright ? 2007-2024 珠海市網(wǎng)訊互聯(lián)信息科技有限公司 yngytx.cn 版權(quán)所有
粵公網(wǎng)安備44040202000391號 粵ICP備19117377號 網(wǎng)站地圖 站點地圖
在線客服