最近有在做小程序開發,在開發的過程中碰到一點小問題,描述一下先。
本人在職的公司對于后臺獲取的 json 數據需要做過濾轉義的很多,不同的狀態碼會對應不同的文字,但是在微信小程序中又沒有類似 vue 中的 | 方法進行快速的過濾,看了前人的代碼大都是用數據遍歷洗數據來實現的,說實話,很麻煩,即使提取了公共方法那也麻煩,總之要洗數據就麻煩(對,我就是這么懶,懶人推動世界發展 =3=)
在翻看小程序的文檔的時候,正好看到了 WXS 的介紹 官方文檔 一拍腦門,這不就成了么?
在上代碼之前先簡單的介紹一下 WXS 是什么,以及和 javascript 有什么區別,雖然官方文檔中都有,但我認為博客的存在意義就是盡量減少看官們的頁面跳轉,能夠在一個頁面說明的問題就不要再跳轉,外鏈應該作為課后拓展的手段。
WXS 介紹
上代碼
首先,新建一個 config.wxs 文件,用于存儲狀態碼對應轉義后的文字。
var orderType = { "-1": "type one", "0": "type two", "1": "type three" }; module.exports.orderType = orderType;
可以看到我們對外暴露變量的時候用的是 module.exports,在 wxs 文件中只能使用該方法 官方文檔 同樣,在引入其他模塊的時候,只能使用 require。
接著,創建一個 index.wxs 文件,用于對外暴露一些過濾的方法。
var config = require("./config.wxs"); function _filterOrderType(value) { return config.orderType[value.toString()] || "order type undefined" } // 時間戳轉換成 yyyy-MM-dd HH:mm:ss function _filterTimestamp(value) { // 有些特殊 不能使用 new Date() var time = getDate(value); var year = time.getFullYear(); var month = time.getMonth() + 1; var date = time.getDate() < 10; var hour = time.getHours() < 10; var minute = time.getMinutes() < 10; var second = time.getSeconds() < 10; month = month < 10 ? "0" + month : month; date = date < 10 ? "0" + date : date; hour = hour < 10 ? "0" + hour : hour; minute = minute < 10 ? "0" + minute : minute; second = second < 10 ? "0" + second : second; return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second; } module.exports._filterOrderType = _filterOrderType; module.exports._filterTimestamp = _filterTimestamp;
最后在我們需要進行過濾處理的 wxml 頁面上引入這個模塊,使用即可。
<wxs src="../filter/index.wxs" module="filter" /> <view>{{filter._filterOrderType(item.type)}}</view> <view>{{filter._filterTimestamp(item.time)}}</view>
這里需要注意一下,在 wxml 頁面上使用模塊的時候,需要用一個 module="filter" 或者其他的命名來包裹。
WXS 和 javascript 雖然類似,但是還是有一些不同的地方,如果在 debug 的時候發現報錯了,可以在底下回復或者直接私信我,雖然不能秒回,但是多一個人多一條思路,也許我能給您提供一些別的思路,或者您的問題會給我帶來一些新的思考,我正是這么期待著。