前言

最近有在做小程序开发,在开发的过程中碰到一点小问题,描述一下先。

本人在职的公司对于后台获取的 json 数据需要做过滤转义的很多,不同的状态码会对应不同的文字,但是在微信小程序中又没有类似 vue 中的 | 方法进行快速的过滤,大都是用数据遍历洗数据来实现的,说实话,很麻烦,即使提取了公共方法那也麻烦,总之要洗数据就麻烦

WXS 为何物

在上代码之前先简单的介绍一下 WXS 是什么,以及和 javascript 有什么区别,虽然官方文档中都有,但我认为博客的存在意义就是尽量减少看官们的页面跳转,能够在一个页面说明的问题就不要再跳转,外链应该作为课后拓展的手段。

WXS 介绍

  • 是小程序出的一套脚本语言,用于 wxml 模板文件中,在模板文件中可以完成页面的结构。
  • 不依赖于运行时的基础库脚本,可以在所有版本的小程序中运行。
  • WXS 中不能调用 javascript 中定义的函数或者变量,也不能调用小程序提供的 API,他的运行环境和 javascript 是隔离的。
  • 小程序的条件渲染和循环渲染对 WXS 是无效的,就是说如果 WXS 代码包裹在未渲染的代码中,只要渲染的 wxml部分调用了此模块,此段 WXS 代码依然会被加载。
  • 由于运行环境的差异,在 ios 设备上小程序的 WXS 会比 javascript 快 2~20 倍,在 android 设备上运行效率无异。
  • 模块想要暴露自己的私有变量和方法,只能通过 module.exports 实现。
  • 若在模块中想要引用其他模块,只能通过 require 实现。
  • 只能使用 var 来定义变量,表现形式和 javascript 一样,会有变量提升。
  • WXS 模块只能在定义模块的 wxml 文件中被访问到,使用 <include> 或 <import> 时,WXS 模块不会被引入到对应的 wxml 文件中。
  • 不能使用 new Date() 应该使用 getDate()

正确的使用 WXS

首先,新建一个 config.wxs 文件,用于存储状态码对应转义后的文字。

var orderType = {
"-1": "type one",
"": "type two",
"": "type three"
};
module.exports.orderType = orderType;

可以看到我们对外暴露变量的时候用的是 module.exports,在 wxs 文件中只能使用该方法 官方文档同样,在引入其他模块的时候,只能使用 require

接着,创建一个 index.wxs 文件,用于对外暴露一些过滤的方法。

//引用config.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 date = getDate(value*1000);
var Y = date.getFullYear() + '-';
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var D = date.getDate() + ' ';
var h = date.getHours() + ':';
var m = date.getMinutes() == 0 ? "00" : date.getMinutes();
var s = date.getSeconds();
return M + D + h + m;

}

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实现json数据需要做过滤转义(filter)的更多相关文章

  1. 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?

    原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复   ...

  2. 在微信小程序页面间传递数据总结

    在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...

  3. 微信小程序 wxs的简单应用

    Demo地址:微信小程序wxs的简单应用 案例分析 张三.李四.王五,各自分别都有数量不等的车,现在需要列表显示名字及他们拥有车的数量, list数据结构如下,当我们使用wx:for进行显示时,发现个 ...

  4. 微信小程序前台的用户数据入库(后台Laravel)

    首先 我们可以看到微信小程序官方 文档 wx.login   api-login.jpg 通过此图 我们知道 前台要传 一个 code给后台,后台拿到code 并结合appid和appsecret请求 ...

  5. 微信小程序--代码构成---JSON 配置

    在上一章中,我们通过开发者工具快速创建了一个 QuickStart 项目.你可以留意到这个项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 ...

  6. 微信小程序使用 ECharts 实现数据可视化

    微信小程序使用 ECharts 显示图表 首先创建微信小程序 这里就不再赘述 下载 GitHub 上的 ecomfe/echarts-for-weixin 下载后解压,打开文件夹,里面的 ec-can ...

  7. 微信小程序——动态修改页面数据(和样式)及参数传递

    1.1.1动态修改页面数据 在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造 ...

  8. 微信小程序---存储本地缓存数据

    微信小程序之数据缓存 开发中常用setStorageSync来实现本地数据缓存操作 (1)点击缓存案例: <button bindtap="toStorage">存储& ...

  9. 微信小程序のwxs语言

    一.wxs介绍 wxs是微信小程序自身的脚本语言,用来过滤和计算.wxs可以通过文件可模块标签来定义 文件需要.wxs后缀文件 二.实例 <wxs module="test1" ...

随机推荐

  1. AtCoder Regular Contest 090

    C - Candies 链接:https://arc090.contest.atcoder.jp/tasks/arc090_a 题意:从左上角走到右下角,只能向右和向下走,问能最多能拿多少糖果. 思路 ...

  2. Codeforces 1065 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 GGG题略难,膜了一波zhouyuyang{\color{red} zhouyuyang}zhouyuyang巨佬的代码. 其余都挺清真的. ...

  3. PyCharm 安装教程(Windows)

    python教程 http://www.runoob.com/python3/python3-basic-syntax.html PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性, ...

  4. bootstrap的引用和注意事项

    1,在https://v3.bootcss.com/getting-started/#download下载bootstrap的压缩包: 2,将压缩包解压到自己的工程文件中,会得到如下结果: 3,打开这 ...

  5. VMware虚拟机Linux增加磁盘空间的扩容操作

    转载自点击打开链接 用VMwareware虚拟机安装的Red Hat Enterprise Linux系统剩余空间不足,造成软件无法正常安装.如果重新装一遍系统就需要重新配置好开发环境和软件的安装配置 ...

  6. 【慕课网实战】二、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    MapReduce的局限性: 1)代码繁琐: 2)只能够支持map和reduce方法: 3)执行效率低下: 4)不适合迭代多次.交互式.流式的处理:   框架多样化: 1)批处理(离线):MapRed ...

  7. navicat连接mysql出现2059错误

    最近在学习django的时候需要用到数据库,于是便下载了navicat准备和mysql配套使用,但是在连接的时候确出现了如下问题: 网上查询过后,发现这个错误出现的原因是在mysql8之前的版本中加密 ...

  8. Servlet创建完美教程

    简介:Servlet其实是Server Let的缩写,是服务器端应用程序.  java中有一个applet是客户端应用程序,与servlet对应.applet已经过时.Servlet作用:能在B/S架 ...

  9. MVC实例应用

    MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式, 它把应用程序分成三个核心模块:模型.视图.控制器,它们各自处理自己的任务. 1.模型(Model ...

  10. Shader_ShaderForge_NGUI_流光&波纹&消融

    Shader篇 总结:总算解决了NGUI中Shader不能实时更改的问题,原来NGUI中的Texture组件提供了OnRender代码示例如下 /*************************** ...