小程序“WXS”及數(shù)字格式化、時間格式化。(wxs中使用正則踩坑)

一、什么是WXS?

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

官方:WXS 與 JavaScript 是不同的語言,有自己的語言,并不和 JavaScript 一致。(不過基本一致)
WXS中目前只能使用ES5,ES6的使用會報錯

1.2 為什么要設計WXS語言?

1.2.1 在WXML中是不能直接調(diào)用Page/Component中定義函數(shù)的; (雙線程模式)
<!-- 在vue中可以直接調(diào)用函數(shù) 但是在小程序中這樣調(diào)用是沒用的(以前這樣調(diào)用會報錯,現(xiàn)在不會報錯但是沒有任何結果顯示) -->
<view>結果:{{formatCount(value)}}</view>

但是某些情況下,我們希望使用函數(shù)來處理WXML中WXML中的數(shù)據(jù)(類似于Vue中的過濾器),這個時候就可以使用WXS了

1.3 WXS使用的限制和特點:

  • WXS 不依賴于運行時的基礎庫版本,可以在所有版本的小程序中運行;
  • WXS 的運行環(huán)境和其他 JavaScript 代碼是隔離的,WXS中不能調(diào)用其他JavaScript文件中定義的函數(shù),也不能調(diào)用小程序提供的API;
  • 由于運行環(huán)境的差異,在IOS設備上小程序內(nèi)的WXS會比JavaScript代碼快 2~20 倍,在android設備上二者運行效率無差異;

二、WXS的寫法

2.1 WXS有兩種寫法:

  • 寫在<wxs>標簽中
  • 寫在以.wxs結尾的文件中

2.2 <wxs>標簽的屬性:

屬性名 類型 說明
module String 當前<wxs>標簽的模塊名。必填字段。
src String 引用.wxs文件的相對路徑。僅當本標簽為單閉合標簽標簽內(nèi)容為空時有效。

2.3 每一個.wxs文件和 <wxs> 標簽都是一個單獨的模塊。(一個wxml文件中可以引入多個wxs"module不能重復")

  • 每個模塊都有自己獨立的作用域。即在一個模塊里面定義的變量與函數(shù),默認為私有的,對其他模塊不可見;
  • 一個模塊想要對外暴露起內(nèi)部的私有變量,只能通過 module.exports實現(xiàn);

三、WXS簡單案例

  • 傳入一個數(shù)字(整數(shù)或小數(shù)),格式化后進行展示(例如36456,展示結果3.6萬)

  • 傳入一個時間(秒),格式化后進行展示(例如100秒,展示結果為01:40)


  • wxml

<wxs module="format" src="/utils/format.wxs"></wxs>
<block>
  <view>傳入一個數(shù)字(整數(shù)或小數(shù)),格式化后進行展示(例如36456,展示結果3.6萬)</view>
  <view>結果:{{format.formatCount(value)}}</view>
  <input type="number" model:value="{{value}}" class="my-input" />
</block>
<block>
  <view>傳入一個時間(秒),格式化后進行展示(例如100秒,展示結果為01:40)</view>
  <view>結果:{{format.formatDuration(value1)}}</view>
  <input type="number" model:value="{{value1}}" class="my-input" />
</block>
  • wxs
function formatCount(count) {
  var patrn = getRegExp('(^[0-9]*\.([0-9]{1}\d*)$)|(^[0-9]*$)')
  if (!patrn.test(count)) return count ? "格式錯誤" : "";
  var count = +count;

  if (count > 100000000) {
    return (count / 100000000).toFixed(1) + "億"
  } else if (count > 10000) {
    return (count / 10000).toFixed(1) + "萬"
  }
  
  return count
}

function disposeTime(time) {
  return time < 10 ? "0" + time : time
}

function formatDuration(duration) {
  var patrn = getRegExp('(^[0-9]*$)');
  if (!patrn.test(duration)) return "格式錯誤";
  var isHours = duration >= 3600;

  if (isHours) {
    var hours = disposeTime(Math.floor(duration / 3600));
    duration = duration - hours * 3600;
  }
  var minutes = disposeTime(Math.floor(duration / 60));
  var seconds = disposeTime(duration % 60);

  return (isHours ? (hours + ":") : "") + minutes + ":" + seconds;
}

module.exports = {
  formatCount: formatCount,
  formatDuration: formatDuration
}

四、WXS中使用正則表達式

直接使用會報錯 var patrn = /'(^[0-9]*$)'/;


要使用getRegExp函數(shù)
var patrn = getRegExp('(^[0-9]*$)');

  • 注意 使用getRegExp時里面不要帶/?。。?!
  • 錯誤 getRegExp('/(^[0-9]*$)/');
  • 正確 getRegExp('(^[0-9]*$)');
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容