当前位置: 首页 > news >正文

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

文章目录

    • 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.wxs

function 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>

相关文章:

  • Spring Cloud Gateway - GatewayFilter路由过滤器
  • 猿创征文|大数据之Kafka简介+基操
  • Shiro授权--注解式开发
  • CREO:CREO软件之零件【编辑】之修饰、用户定义特征的简介及其使用方法(图文教程)之详细攻略
  • Java并发 | 12.[方法] interrupt( )打断
  • SpringBoot 事务开发代码及注意事项
  • onnx: step = 1 is currently not supported
  • webpack原理篇(六十五):实战开发一个压缩构建资源为zip包的插件
  • 数学建模学习(97):花授粉算法(FPA)寻优
  • 鲈鱼的面试题库+答案
  • CREO:CREO软件之零件【工具(调查/模型意图/实用工具)】、【视图(可见性/方向/模型显示/显示/窗口)】的简介及其使用方法(图文教程)之详细攻略
  • 【单细胞高级绘图】09.细胞通讯_两组比较_连线图
  • Tensorflow笔记——基于Mnist数据集图片分类的神经网络
  • 情侣积分微信小程序零基础开发教程(附代码及开发指南)
  • 为什么重写equals方法必须也要重写hashCode方法
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【刷算法】求1+2+3+...+n
  • Android 架构优化~MVP 架构改造
  • AWS实战 - 利用IAM对S3做访问控制
  • HTTP中GET与POST的区别 99%的错误认识
  • Java-详解HashMap
  • js对象的深浅拷贝
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue.js源码(2):初探List Rendering
  • Vue2.0 实现互斥
  • 安卓应用性能调试和优化经验分享
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 分类模型——Logistics Regression
  • 微信小程序--------语音识别(前端自己也能玩)
  • 小程序01:wepy框架整合iview webapp UI
  • 正则与JS中的正则
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 组复制官方翻译九、Group Replication Technical Details
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #前后端分离# 头条发布系统
  • #数学建模# 线性规划问题的Matlab求解
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (差分)胡桃爱原石
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (算法)N皇后问题
  • (算法二)滑动窗口
  • (一) springboot详细介绍
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .L0CK3D来袭:如何保护您的数据免受致命攻击