1官方解讀
- wxs 與 javascript 是不同的語言,有自己的語法,并不和 javascript 一致。其實也差不多。
- wxs 的運行環(huán)境和其他 javascript 代碼是隔離的,wxs 中不能調用其他 javascript 文件中定義的函數(shù),也不能調用小程序提供的API。
- wxs 函數(shù)不能作為組件的事件回調。
- 由于運行環(huán)境的差異,在 iOS 設備上小程序內的 wxs 會比 javascript 代碼快 2 ~ 20 倍。在 android 設備上二者運行效率無差異。
2用途和使用場景
- wxs是專門用于wxml頁面的,主要在視圖層調用函數(shù)。
- wxs和js不能互相直接調用,有的事情,用wxs和js都能實現(xiàn),但是你會發(fā)現(xiàn)用wxs更方便、直接。
- 頁面中的一些常量放在wxs中
var MAX_COUNT = 19
module.exports = {
MAX_COUNT: MAX_COUNT
}
- 檢查手機格式的函數(shù)放在wxs中來使用。
- 格式化金額
3具體用法
工具類函數(shù)
var moneyFormat = function (num) {
if(null==""){return ""}
num = parseFloat((num + "").replace('/[^\d\.-]/g', "")).toFixed(2) + "";
var integ = num.split(".")[0].split("").reverse(), deci = num.split(".")[1];
var space = "";
for (i = 0; i < integ.length; i++) {
space += integ[i] + ((i + 1) % 3 == 0 && (i + 1) != integ.length ? "," : "");
}
var text = space.split("").reverse().join("") + "." + deci;
if (text.substring(text.length - 3) == ".00") {
text = text.substring(0, text.length - 3)
} else if (text.substring(text.length - 1) == "0") {
text = text.substring(0, text.length - 1)
}
return text
}
module.exports = {
moneyFormat : moneyFormat
}
將wxs引入到wxml中,設置module名為tool,引入的時候,wxs標簽src填寫相對路徑(絕對路徑無效)
<wxs src="../../tool.wxs" module="tool" />
wxml中使用函數(shù)
<view class="pay-right">
<text>¥{{tool.moneyFormat(originalCost)}}</text>
<text>-¥{{tool.moneyFormat(shopInfo.promAmt)}}</text>
<text>+¥{{tool.moneyFormat(postage)}}</text>
<text wx:if="{{usePcardAmt > 0}}">-¥{{tool.moneyFormat(usePcardAmt)}}</text>
<text wx:if="{{useAccAmt > 0}}">-¥{{tool.moneyFormat(useAccAmt)}}</text>
<text wx:if="{{useCrdtAmt > 0}}">-¥{{tool.moneyFormat(useCrdtAmt)}}</text>
</view>
4結合JS函數(shù)使用
無論是WXS函數(shù)和JS函數(shù)都是能操作data數(shù)據(jù),很多時候通過JS函數(shù)得到data,然后用WXS函數(shù)處理。
驗證郵箱
// 通過正則來檢驗郵箱是否有效
var validateEmail = function(email) {
var reg = getRegExp('^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$')
return reg.test(email)
}
module.exports = {
validateEmail: validateEmail
}
//頁面使用,WXS函數(shù)使用data:email
<!-- 通過檢測郵箱是否有效,來設置相應的class,再在wxss中寫好相應的樣式 -->
<input class="email_input {{util.validateEmail(email)?'':'error'}}" placeholder='請輸入郵箱' value='{{email}}' bindinput='emailInput'></input>
//JS函數(shù)獲取data
emailInput(e){
let that = this
let email = e.detail.value // 獲取輸入框的數(shù)據(jù)
that.setData({
email
})
}