zoukankan      html  css  js  c++  java
  • 微信小程序 WXS实现json数据需要做过滤转义(filter)

    前言

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

    本人在职的公司对于后台获取的 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",
      "0": "type two",
      "1": "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" 或者其他的命名来包裹。

  • 相关阅读:
    二重积分与三重积分补充习题
    一二三章基础测试
    17. 继承之同名处理
    第二章 进程通信(五)
    16. 继承(一)
    15. 函数运算符重载及转换的知识点小结
    Hadoop基础-06-HDFS数据读写
    Hadoop基础-05-HDFS项目(词频统计)
    Hadoop基础-04-HDFS API编程
    Hadoop基础-03-HDFS(Hadoop Distributed File System)基本概念
  • 原文地址:https://www.cnblogs.com/gavinjay/p/9468310.html
Copyright © 2011-2022 走看看