WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。
增强 wxml 标签的表达能力
WXS 对性能的贡献就只有一点:与 WXML 是在同一个线程运行的,避免了跨线程通信的开销。
号称 『wxs 目前在 iOS 设备的效率,会比JS快 2~20倍。在 Android 则无差异
WXS模块
每一个 .wxs 文件和 <wxs>
标签都是一个单独的模块。
每个模块都有自己独立的作用域。即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。
一个模块要想对外暴露其内部的私有变量与函数,只能通过 module.exports 实现。
module 对象
eg:
1 | // /page/tools.wxs |
require
在 wxs 中引用其它 wxs 文件文件模块,可以使用 require 函数,引用的时候需要注意以下几点问题:
- 只能引用 .wxs 文件模块,且必须使用相对路径。
- wxs 模块均为单例,wxs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 wxs 模块对象。
- 如果一个 wxs 模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
1 | var tools = require("./cat.wxs"); |
标签
<wxs>
标签有两个属性,一个是 module,一个是 src.
此标签可以使用单标签闭合的写法
module 属性
当前 <wxs>
标签的模块名。必填字段。
在单个 wxml 文件内,建议其值唯一。有重复模块名则按照先后顺序覆盖(后者覆盖前者)。不同文件之间的 wxs 模块名不会相互覆盖。
module 属性值的命名必须符合下面两个规则:
- 首字符必须是:字母(a-zA-Z),下划线(_)
- 剩余字符可以是:字母(a-zA-Z),下划线(_), 数字(0-9)
src 属性
引用 .wxs 文件的相对路径。仅当本标签为单闭合标签或标签的内容为空时有效
src 属性可以用来引用其他的 wxs 文件模块。
引用的时候,要注意如下几点:
- 只能引用 .wxs 文件模块,且必须使用相对路径。
- wxs 模块均为单例,wxs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 wxs 模块对象。
- 如果一个 wxs 模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
这里的规则同 require 函数。
<wxs>
模块只能在定义模块的 WXML 文件中被访问到。使用 <include>
或 <import>
时,<wxs>
模块不会被引入到对应的 WXML 文件中。
<template>
标签中,只能使用定义该 <template>
的 WXML 文件中定义的 <wxs>
模块.
变量
- WXS 中的变量均为值的引用。
- 没有声明的变量直接赋值使用,会被定义为全局变量。
- 如果只声明变量而不赋值,则默认值为 undefined。
- var表现与javascript一致,会有变量提升
…
其余的都与JavaScript相差不大,不再赘述。
注意
<wxs>
模块只能在定义模块的 WXML 文件中被访问到。使用<include>
或<import>
时,<wxs>
模块不会被引入到对应的 WXML 文件中。- <
template>
标签中,只能使用定义该<template>
的 WXML 文件中定义的<wxs>
模块。 - 不支持es6语法
小程序暗黑模式
当app.json中配置darkmode为true时,小程序部分配置项可通过变量的形式配置,在变量配置文件中定义不同主题下的颜色或图标,方法如下:
- 在app.json中配置 themeLocation,指定变量配置文件 theme.json 路径,例如:在根目录下新增theme.json,需要配置”themeLocation”:”theme.json”
- 在theme.json中定义相关变量;
- 在app.json中以@开头引用变量。
支持通过变量配置的属性:
全局配置的 window 属性与页面配置下的属性
- navigationBarBackgroundColor
- navigationBarTextStyle
- backgroundColor
- backgroundTextStyle
- backgroundColorTop
- backgroundColorBottom
全局配置 window.tabBar 的属性
- color
- selectedColor
- backgroundColor
- borderStyle
- list
- iconPath
- selectedIconPat
相关配置:
app.json
1 | "themeLocation": "theme.json", |
theme.json
必须包含 light、dark 属性
1 | { |
Attention:
- 在小程序中,若使用编译打包的形式,直接在app.js中写入时,如果打包出来的 theme.json 引入报错,可采用在 config 中 copy theme.json 文件 的方式
- 必须配置darkmode和themeLocation才会生效