資訊動(dòng)態(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腳本語言,微信小程序

WXSWXS語言、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ù),接受一個(gè)數(shù)組,且返回?cái)?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 體驗(yàn)的服務(wù)。

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

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

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

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

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

通過這個(gè)簡單的例子來看:

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

  • 當(dāng)點(diǎn)擊按鈕的時(shí)候,視圖層會(huì)發(fā)送 changeName 的事件給邏輯層,邏輯層找到對(duì)應(yīng)的事件處理函數(shù)

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

頁面管理

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

基礎(chǔ)組件

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

豐富的 API

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


基礎(chǔ)組件

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

什么是組件:

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

  • 組件自帶一些功能與微信風(fēng)格的樣式。

  • 一個(gè)組件通常包括開始標(biāo)簽和結(jié)束標(biāo)簽,屬性用來修飾這個(gè)組件,內(nèi)容在兩個(gè)標(biāo)簽之內(nèi)。

    <tagname property="value"> Content goes here ... </tagname>

    注意:所有組件與屬性都是小寫,以連字符-連接

屬性類型

類型 描述 注解
Boolean 布爾值 組件寫上該屬性,不管該屬性等于什么,其值都為true,只有組件上沒有寫該屬性時(shí),屬性值才為false。如果屬性值為變量,變量的值會(huì)被轉(zhuǎn)換為Boolean類型
Number 數(shù)字 1, 2.5
String 字符串 "string"
Array 數(shù)組 [ 1, "string" ]
Object 對(duì)象 { key: value }
EventHandler 事件處理函數(shù)名 "handlerName" 是 Page中定義的事件處理函數(shù)名
Any 任意屬性

共同屬性類型

所有組件都有的屬性:

屬性名 類型 描述 注解
id String 組件的唯一標(biāo)示 保持整個(gè)頁面唯一
class String 組件的樣式類 在對(duì)應(yīng)的 WXSS 中定義的樣式類
style String 組件的內(nèi)聯(lián)樣式 可以動(dòng)態(tài)設(shè)置的內(nèi)聯(lián)樣式
hidden Boolean 組件是否顯示 所有組件默認(rèn)顯示
data-* Any 自定義屬性 組件上觸發(fā)的事件時(shí),會(huì)發(fā)送給事件處理函數(shù)
bind* / catch* EventHandler 組件的事件 詳見事件

特殊屬性

幾乎所有組件都有各自定義的屬性,可以對(duì)該組件的功能或樣式進(jìn)行修飾,請(qǐng)參考各個(gè)組件的定義。

組件列表

基礎(chǔ)組件分為以下七大類:

視圖容器(View Container):

組件名 說明
view 視圖容器
scroll-view 可滾動(dòng)視圖容器
swiper 滑塊視圖容器

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

組件名 說明
icon 圖標(biāo)
text 文字
progress 進(jìn)度條

表單(Form):

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

導(dǎo)航(Navigation):

組件名 說明
navigator 應(yīng)用鏈接

多媒體(Media):

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

地圖(Map):

組件名 說明
map 地圖

畫布(Canvas):

組件名 說明
canvas 畫布

客服會(huì)話:

組件名 說明
contact-button 進(jìn)入客服會(huì)話按鈕



API

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

說明:

  • wx.on 開頭的 API 是監(jiān)聽某個(gè)事件發(fā)生的API接口,接受一個(gè) CALLBACK 函數(shù)作為參數(shù)。當(dāng)該事件觸發(fā)時(shí),會(huì)調(diào)用 CALLBACK 函數(shù)。

  • 如未特殊約定,其他 API 接口都接受一個(gè)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)用成功、失敗都會(huì)執(zhí)行)

API列表:

網(wǎng)絡(luò) API 列表:

API 說明
wx.request 發(fā)起網(wǎng)絡(luò)請(qǐng)求
wx.uploadFile 上傳文件
wx.downloadFile 下載文件
wx.connectSocket 創(chuàng)建 WebSocket 連接
wx.onSocketOpen 監(jiān)聽 WebSocket 打開
wx.onSocketError 監(jiān)聽 WebSocket 錯(cuò)誤
wx.sendSocketMessage 發(fā)送 WebSocket 消息
wx.onSocketMessage 接受 WebSocket 消息
wx.closeSocket 關(guān)閉 WebSocket 連接
wx.onSocketClose 監(jiān)聽 WebSocket 關(guān)閉

媒體 API 列表:

API 說明
wx.chooseImage 從相冊(cè)選擇圖片,或者拍照
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 從相冊(cè)選擇視頻,或者拍攝

文件 API 列表:

API 說明
wx.saveFile 保存文件
wx.getSavedFileList 獲取已保存的文件列表
wx.getSavedFileInfo 獲取已保存的文件信息
wx.removeSavedFile 刪除已保存的文件信息
wx.openDocument 打開文件

數(shù)據(jù) API 列表:

API 說明
wx.getStorage 獲取本地?cái)?shù)據(jù)緩存
wx.getStorageSync 獲取本地?cái)?shù)據(jù)緩存
wx.setStorage 設(shè)置本地?cái)?shù)據(jù)緩存
wx.setStorageSync 設(shè)置本地?cái)?shù)據(jù)緩存
wx.getStorageInfo 獲取本地緩存的相關(guān)信息
wx.getStorageInfoSync 獲取本地緩存的相關(guān)信息
wx.removeStorage 刪除本地緩存內(nèi)容
wx.removeStorageSync 刪除本地緩存內(nèi)容
wx.clearStorage 清理本地?cái)?shù)據(jù)緩存
wx.clearStorageSync 清理本地?cái)?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)航條加載動(dòng)畫
wx.hideNavigationBarLoading 隱藏導(dǎo)航條加載動(dòng)畫
wx.navigateTo 新窗口打開頁面
wx.redirectTo 原窗口打開頁面
wx.switchTab 切換到 tabbar 頁面
wx.navigateBack 退回上一個(gè)頁面
wx.createAnimation 動(dòng)畫
wx.createContext 創(chuàng)建繪圖上下文
wx.drawCanvas 繪圖
wx.stopPullDownRefresh 停止下拉刷新動(dòng)畫

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

API 說明
wx.createSelectorQuery 創(chuàng)建查詢請(qǐng)求
selectorQuery.select 根據(jù)選擇器選擇單個(gè)節(jié)點(diǎn)
selectorQuery.selectAll 根據(jù)選擇器選擇全部節(jié)點(diǎn)
selectorQuery.selectViewport 選擇顯示區(qū)域
nodesRef.boundingClientRect 獲取布局位置和尺寸
nodesRef.scrollOffset 獲取滾動(dòng)位置
nodesRef.fields 獲取任意字段
selectorQuery.exec 執(zhí)行查詢請(qǐng)求

開放接口:

API 說明
wx.login 登錄
wx.getUserInfo 獲取用戶信息
wx.chooseAddress 獲取用戶收貨地址
wx.requestPayment 發(fā)起微信支付
wx.addCard 添加卡券
wx.openCard 打開卡券



不能直接操作 Page.data

避免在直接對(duì) Page.data 進(jìn)行賦值修改,請(qǐng)使用 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等對(duì)象

頁面的腳本邏輯是在JsCore中運(yùn)行,JsCore是一個(gè)沒有窗口對(duì)象的環(huán)境,所以不能在腳本中使用window,也無法在腳本中操作組件

為什么 zepto/jquery 無法使用

zepto/jquery 會(huì)使用到window對(duì)象和document對(duì)象,所以無法使用。

wx.navigateTo無法打開頁面

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

樣式表不支持級(jí)聯(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 請(qǐng)求不成功

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

  2. 部分 Android 機(jī)型需要 tls1.0 或者 tls1.1,所以請(qǐng)確保服務(wù)器的 tls 版本為 1.0、1.1、1.2

網(wǎng)絡(luò)請(qǐng)求的 referer

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

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

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


二維碼
掃二維碼手機(jī)查看該文章
TAG標(biāo)簽    WXS語言 WXS腳本語言 微信小程序
當(dāng)前網(wǎng)址:http://yngytx.cn/wechat/447.html

相關(guān)資訊

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