场景应用
- 微信小程序的wxml和js的内部实现机制是分开编译的,在wxml是没办法调用js的函数的。导致WXML缺少一个我们常用的功能,没有办法在视图层对数据进行格式化处理。
- 比如我们从后端获取到一个包含了时间戳数据的数组,需要在界面上把这些日期都格式化显示为2017-01-01这种格式的日期形式,在Vue, Angular之类的前端Web框架中,一般在视图层都提供了如filter之类相应比较好用的方案。微信小程序推出了wxs类型文件解决这类问题的
实现方式
新建filter.wxs文件(一般作为公共方法存在)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var formatDate = function (timestamp, option) {
var date = getDate(parseInt(timestamp));
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
if (option == 'notime') { //不需要时间
return [year, month, day].map(formatNumber).join('-');
}
return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':');
}
var formatNumber = function(n) {
n = n.toString();
return n[1] ? n : '0' + n;
}
module.exports = {
formatDate: formatDate,
}在wxml文件中使用
1
2
3<wxs src='../../utils/filter.wxs' module='filter' />
<view>日期:{{filter.formatDate('1599013002483')}}</view>
<view>日期:{{filter.formatDate('1599013002483', 'notime')}}</view>
在.wxs模块中引用其他 wxs 文件模块,可以使用 require 函数
- 引用的时候,要注意如下几点:
- 只能引用 .wxs 文件模块,且必须使用相对路径。
- wxs 模块均为单例,wxs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 wxs 模块对象。
- 如果一个 wxs 模块在定义之后,一直没有被引用,则该模块不会被解析与运行
- 了解更多,参照小程序官方文档(wxs是不同于js文件的。所以很多js的api是不支持的)