【小程序】中WXS的语法详解

news/2024/10/31 1:31:46/

文章目录

    • WXS基本使用
      • 🍰WXS的介绍
      • 🍰WXS的写法
      • 🍰WXS的练习(一)
      • 🍰WXS的练习(二)

WXS基本使用

🍰WXS的介绍

WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构

官方中说到: WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。

其实WXS和JavaScript基本一致

为什么要设计WXS语言呢?

在WXML中是不能直接调用(指的是不能在插值语法调用函数) Page/Component中定义的函数的.

但是某些情况, 我们可以希望使用函数来处理WXML中的数据(类似于Vue中的过滤器),这个时候就使用WXS了

WXS使用的限制和特点

WXS 不依赖于运行时的基础库版本,可以在所有版本的小程序中运行;

WXS 的运行环境和其他 JavaScript 代码是隔离的, WXS 中不能调用其他 JavaScript 文件中定义的函数,也不能调用小程序提供的API;

由于运行环境的差异,在 iOS 设备上小程序内的 WXS 会比 JavaScript 代码快 2 ~ 20 倍。在 android 设备 上二者运行效率 无差异;


🍰WXS的写法

例如: 我们来看下面这样一个案例

例如我们想要调用一个函数, 用来给价格加上一个符号, 在js编写函数, 在wxml中调用是没有效果的

<!-- 展示价格 -->
<view>{{ formatPrice(80) }}</view>
Page({data: {// js中的函数formatPrice(price) {return "¥" + price}}
})

这个时候就需要使用WXS的写法

WXS有两种写法

方式一: 写在<wxs>标签中

方式二: 写在以.wxs结尾的文件中

每一个 .wxs 文件和 <wxs> 标签都是一个单独的模块

每个模块都有自己独立的作用域。即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。

一个模块要想对外暴露其内部的私有变量与函数,只能通过CommonJS规范 module.exports 实现。

<wxs>标签的属性

属性名类型说明
moduleString当前 <wxs> 标签的模块名。必填字段
srcString引用 .wxs 文件的相对路径。仅当本标签为单闭合标签标签的内容为空时有效。*

方式一: 我们先用<wxs>标签来写替代刚刚代码中的js部分

<!-- model声明当前wxs标签的模块名, 必填字段 -->
<wxs module="format">// wxs中不能写ES6的语法: 例如箭头函数function formatPrice(price) {return "¥" + price}// 需要导出函数, 导出只能使用CommonJs规范module.exports = {// 对象中也不能使用对象的增强写法formatPrice: formatPrice}
</wxs><!-- 通过模块名调用 -->
<view>{{ format.formatPrice(50) }}</view>

方式二: 可以将wxs的代码写到一个单独的 .wxs文件中

我们一般会在项目根目录下创建一个utils文件夹, wxs文件写在这里, 如下: 将刚刚的代码放到单独的 .wxs文件中

在这里插入图片描述

单独的 .wxs文件中同样不支持ES6的语法, 再在要使用的页面中, 通过wxs标签引入 .wxs文件

<!-- model声明当前wxs标签的模块名, 必填字段 -->
<wxs module="format" src="/utils/farmat.wxs"></wxs><!-- 展示价格 -->
<view>{{ format.formatPrice(50) }}</view>

🍰WXS的练习(一)

使用两种方式来计算一个数组的和

  • 方式一
<wxs module="sumNumber">function sum(arr) {return arr.reduce(function(prevValue, item) {return prevValue + item}, 0)}module.exports = {sum: sum}
</wxs><!-- 展示价格 -->
<view>{{ sumNumber.sum(nums) }}</view>
  • 方式二
// farmat.wxs
function sum(arr) {return arr.reduce(function(prevValue, item) {return prevValue + item}, 0)
}module.exports = {sum: sum
}
<wxs module="sumNumber" src="/utils/farmat.wxs"></wxs><!-- 展示价格 -->
<view>{{ sumNumber.sum(nums) }}</view>

🍰WXS的练习(二)

案例练习题目

题目一:传入一个数字,格式化后进行展示(例如36456,展示结果3.6万);

// format.wxsfunction formatCount(count) {// 保证传入的参数是数字类型var numCount = parseInt(count)if (numCount >= 100000000) {return (numCount / 100000000).toFixed(1) + "亿"} else if (numCount >= 10000) {return (numCount / 10000).toFixed(1) + "万"} else {return numCount}
}module.exports = {formatCount: formatCount
}
<wxs module="format" src="/utils/format.wxs"></wxs><view>{{ format.formatCount(5650000000) }}</view>
<view>{{ format.formatCount(123456) }}</view>
<view>{{ format.formatCount(100) }}</view>

题目二:传入一个时间,格式化后进行展示(例如100秒,展示结果为01 :40);

// 定义方法, 给时间补零
function padLeft(time) {// 将时间转为字符串time = time + ""return ("00" + time).slice(time.length)
}function formatDate(time) {var minute = Math.floor(time / 60)var second = Math.floor(time) % 60// 调用补零函数return padLeft(minute) + ":" + padLeft(second)
}module.exports = {formatDate: formatDate
}
<wxs module="format" src="/utils/format.wxs"></wxs><view>{{ format.formatDate(230) }}</view>
<view>{{ format.formatDate(160) }}</view>

http://www.ppmy.cn/news/305204.html

相关文章

微信小程序 | 小程序WXSS-WXML-WXS

&#x1f5a5;️ 微信小程序 专栏&#xff1a;小程序WXSS-WXML-WXS &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1…

20230608----重返学习-react项目的细节

day-088-eighty-eight-20230608-react项目的细节 react项目的细节 进入登录页的情况分析 什么情况下&#xff0c;会进入登录页&#xff1f; 手动输入 /login 地址http://127.0.0.1:3000/#/login 登录成功&#xff1a;跳转到首页push() 我原本想进入的是 个人中心/我的收藏/…

Pascal Voc 2007 2012

1、简介 PASCAL 全称&#xff1a;Pattern Analysis, Statical Modeling and Computational Learning PASCAL VOC&#xff08;The PASCAL Visual Object Classes &#xff09;是一个经典的计算机视觉数据集&#xff0c;由牛津大学、马里兰大学和微软剑桥研究院的研究人员创建的…

[开发|java] com.typesafe.config配置示例说明

com.typesafe.config库是用于处理配置文件的Java库&#xff0c;它提供了一种方便的方式来读取和解析配置文件。要配置时间配置&#xff0c;你可以使用它的Config对象和相关的方法。 官方文档地址 下面是一个示例&#xff0c;演示如何使用com.typesafe.config库来配置时间配置&…

从QGIS图层中裁剪需要的区域

GiS数据裁切&#xff0c;创建一个临时图层&#xff0c;通过矢量裁切的方法&#xff0c;将Gis图层进行裁切&#xff1b;影像裁切&#xff0c;将影像图层放置在Gis中&#xff0c;截取影像图以及临时图层的轮廓&#xff0c;放入PS中进行对比&#xff0c;然后将影像图裁切下来。 1…

升级了显卡驱动,Vista得分从3.1提升到3.5,高兴啊!:)

我的是昭阳K42A笔记本&#xff0c;显卡是Nvidia Geforce8400M GS&#xff0c;升级了最新的修改版驱动&#xff1a;NVIDIA_XTreme-G_162.62mb_vista32&#xff0c;下载地址是&#xff1a;http://count.mydrivers.com/download.aspx?id77223&urlhttp://file5.mydrivers.com/…

新买了一个本

本想买Thinkpad T61的水货&#xff0c;都看好了AR1和A24这两款&#xff0c;昨天跑到市场去看了下真机&#xff0c;感觉外壳做工很粗糙&#xff0c;不是很满意&#xff0c;最后综合考虑入手了联想昭阳K42A&#xff0c;用了一天多了&#xff0c;感觉不错&#xff0c;性能很好&…

xp 下启用 ahci 模式

windows XP系统下如何开启AHCI硬盘工作模式&#xff08;XP系统下如何加载AHCI驱动&#xff09; 转自&#xff1a; http://support1.lenovo.com.cn/lenovo/wsi/htmls/detail_12608719119063756.html 问题描述 用户来电表示使用IDE模式安装XP系统后开启AHCI模式会出现开机蓝屏重启…