博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小程序之脚本语言
阅读量:6006 次
发布时间:2019-06-20

本文共 6779 字,大约阅读时间需要 22 分钟。

WXS(WeiXin Script)
与 javascript 是不同的语言,有自己的语法,并不和 javascript 一致。
运行环境和其他 javascript 代码是隔离的,wxs中不能调用其他 javascript 文件中定义的函数,也
不能调用
小程序提供的API。
wxs 函数不能作为组件的事件回调
页面渲染
<!--wxml-->
<wxs module=
"m1"
>
var msg = "hello world"; module.exports.message = msg;
</wxs>
<view>
{
{m1.message}}
</view>
页面输出:
hello world
数据处理
// page.js
Page({ data: { array: [
1
,
2
,
3
,
4
,
5
,
1
,
2
,
3
,
4
] } })
<!--wxml-->
<!-- 下面的 getMax 函数,接受一个数组,且返回数组中最大的元素的值 -->
<wxs module=
"m1"
>
var getMax = function(array) { var max = undefined; for (var i = 0; i
< array.length; ++i) { max = max =
==
undefined ? array[i] : (max >
= array[i] ? max : array[i]); } return max; } module.exports.getMax = getMax;
</wxs>
<!-- 调用 wxs 里面的 getMax 函数,参数为 page.js 里面的 array -->
<view>
{
{m1.getMax(array)}}
</view>
页面输出:
5
WXS 模块
可以编写在 wxml 文件中的 
<wxs>
 标签内,或以 
.wxs
 为后缀名的文件内。
每一个 
.wxs
 文件和 
<wxs>
 标签都是一个单独的模块。
在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。
一个模块要想对外暴露其内部的私有变量与函数,
只能
通过 
module.exports
 实现。
// /pages/comm.wxs
var
foo =
"'hello world' from comm.wxs"
;
var
bar =
function
(
d
)
{
return
d; }
module
.exports = { foo: foo, bar: bar };
每个 
wxs
 模块均有一个内置的 
module
 对象。
可以通过其
exports
属性,对外共享本模块的私有变量与函数。
// /pages/tools.wxs
var
foo =
"'hello world' from tools.wxs"
;
var
bar =
function
(
d
)
{
return
d; }
module
.exports = { FOO: foo, bar: bar, };
module
.exports.msg =
"some msg"
;
<!-- page/index/index.wxml -->
<wxs src=
"./../tools.wxs"
module=
"
tools
"
/>
<view>
{
{tools.msg}}
</view>
<view>
{
{tools.bar(tools.FOO)}}
</view>
页面输出:
some msg 'hello world' from tools.wxs
 
.wxs
 文件可以被其他的 
.wxs
 文件 或 WXML 中的 
<wxs>
 标签引用。
wxs
模块中引用其他 
wxs
 文件模块,可以使用 
require
 函数。
引用的时候,要注意如下几点:
  • 只能引用 .wxs 文件模块,且必须使用相对路径
  • wxs 模块均为单例,wxs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 wxs 模块对象。
// /pages/tools.wxs
var
foo =
"'hello world' from tools.wxs"
;
var
bar =
function
(
d
)
{
return
d; }
module
.exports = { FOO: foo, bar: bar, };
module
.exports.msg =
"some msg"
;
// /pages/logic.wxs
var tools = require("./tools.wxs");
console
.log(tools.FOO);
console
.log(tools.bar(
"logic.wxs"
));
console
.log(tools.msg);
<!-- /page/index/index.wxml -->
<wxs src=
"./../logic.wxs"
module=
"logic"
/>
控制台输出:
'hello world' from tools.wxs logic.wxs some msg
<wxs>
 标签
属性名 说明
module 当前 <wxs> 标签的模块名。必填字段。
src 引用 .wxs 文件的相对路径。
仅当本标签为单闭合标签或标签的内容为空时有效。
其中:
module 属性是当前 
<wxs>
 标签的模块名。在单个 wxml 文件内,
建议其值唯一
。有重复模块名则按照先后顺序
覆盖
(后者覆盖前者)。不同文件之间的 wxs 模块名
不会相互覆盖。
<!--wxml-->
<wxs module=
"foo"
>
var some_msg = "hello world"; module.exports = { msg : some_msg, }
</wxs>
<view>
{
{foo.msg}}
</view>
页面输出:
hello world
上面例子声明了一个名字为 
foo
 的模块,将 
some_msg
 变量暴露出来,供当前页面使用。
src 属性可以用来引用其他的 
wxs
 文件模块。
引用的时候,要注意如下几点:
  • 只能引用 .wxs 文件模块,且必须使用相对路径。
  • wxs 模块均为单例,wxs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 wxs 模块对象。
// /pages/index/index.js
Page({ data: { msg:
"'hello wrold' from js"
, } })
<!-- /pages/index/index.wxml -->
<wxs src=
"./../comm.wxs"
module=
"some_comms"
></wxs>
<!-- 也可以直接使用单标签闭合的写法 <wxs src="./../comm.wxs" module="some_comms" /> -->
<!-- 调用 some_comms 模块里面的 bar 函数,且参数为 some_comms 模块里面的 foo -->
<view>
{
{some_comms.bar(some_comms.foo)}}
</view>
<!-- 调用 some_comms 模块里面的 bar 函数,且参数为 page/index/index.js 里面的 msg -->
<view>
{
{some_comms.bar(msg)}}
</view>
页面输出:
'hello world' from comm.wxs 'hello wrold' from js
注意
  • <wxs> 模块只能在定义模块的 WXML 文件中被访问到。使用 <include> 或 <import> 时,<wxs> 模块不会被引入到对应的 WXML 文件中。
  • <template> 标签中,只能使用定义该 <template> 的 WXML 文件中定义的 <wxs> 模块。

变量
变量均为值的引用。
没有声明的变量直接赋值使用,会被定义为全局变量。
如果只声明变量而不赋值,则默认值为 
undefined
var
foo =
1
;
var
bar =
"hello world"
;
var
i;
// i === undefined
wxs注释
// 方法一:单行注释 /* 方法二:多行注释 */

var
a =
10
, b =
20
;
// typeof 运算
console
.log(
"number"
===
typeof
a);
// 等号 ==
// 全等号
console
.log(
false
=== (a === b));
// 非全等号
console
.log(
true
=== (a !== b));
//逗号运算符
console
.log(
20
=== (a, b));

if
(表达式) { 代码块; }
else
if
(表达式) { 代码块; }
else
if
(表达式) { 代码块; }
else
{ 代码块; }
switch
(表达式) {
case 变量:
语句;
case
数字: 语句;
break
;
case
字符串: 语句;
default
: 语句; }
var
exp =
10
;
switch
( exp ) {
case
"10"
:
console
.log(
"string 10"
);
break
;
case
10
:
console
.log(
"number 10"
);
break
;
case
exp:
console
.log(
"var exp"
);
break
;
default
:
console
.log(
"default"
); }
输出:
number 10

数据类型
  • number : 数值
  • string :字符串
  • boolean:布尔值
  • object:对象
  • function:函数
  • array : 数组
  • date:日期
  • regexp:正则
object 是一种无序的键值对
//生成一个新的非空对象
o = {
'string'
:
1
,
//object 的 key 可以是字符串
const_var :
2
,
//object 的 key 也可以是符合
变量定义规则
的标识符
func : {},
//object 的
value 可以是任何类型
};
//对象属性的读操作
console
.log(
1
=== o[
'string'
]);
console
.log(
2
=== o.const_var);
//对象属性的写操作
o[
'string'
]++; o[
'string'
] +=
10
; o.const_var++; o.const_var +=
10
;
function 支持以下的定义方式:
//方法 1
function
a
(
x
)
{
return
x; }
//方法 2
var
b =
function
(
x
)
{
return
x; }
function 同时也支持以下的语法(匿名函数,闭包等):
var
a =
function
(
x
)
{
return
function
()
{
return
x;} }
var
b = a(
100
);
console
.log(
100
=== b() );
生成 date 对象需要使用 
getDate
函数, 返回一个当前时间的对象。
生成 regexp 对象需要使用 
getRegExp
函数。
数据类型的判断可以使用 
constructor
 属性。
var
number =
10
;
console
.log(
"Number"
=== number.constructor );
var
string =
"str"
;
console
.log(
"String"
=== string.constructor );
var
boolean =
true
;
console
.log(
"Boolean"
=== boolean.constructor );
var
object = {};
console
.log(
"Object"
=== object.constructor );
var
func =
function
()
{};
console
.log(
"Function"
=== func.constructor );
var
array = [];
console
.log(
"Array"
=== array.constructor );
var
date = getDate();
console
.log(
"Date"
=== date.constructor );
var
regexp = getRegExp();
console
.log(
"RegExp"
=== regexp.constructor );
使用 
typeof
 也可以区分部分数据类型。
JSON库
  • stringify(object): 将 object 对象转换为 JSON 字符串,并返回该字符串。
  • parse(string): 将 JSON 字符串转化成对象,并返回该对象。
console
.log(
"111"
===
JSON
.stringify(
111
));
与 CSS 相比,WXSS 扩展的特性有:
  • 尺寸单位
  • 样式导入
尺寸单位
  • rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。
如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
设备 rpx换算px (屏幕宽度/750) px换算rpx (750/屏幕宽度)
iPhone5 1rpx = 0.42px 1px = 2.34rpx
iPhone6 1rpx = 0.5px 1px = 2rpx
iPhone6 Plus 1rpx = 0.552px 1px = 1.81rpx
建议:
 可以用 iPhone6 作为视觉稿的标准。
样式导入
使用
@import
语句可以导入
外联样式表
@import
后跟需要导入的外联样式表的
相对路径
,用
;
表示语句结束。
示例代码:
/** common.wxss **/
.small-p {
padding
:
5px
; }
/** app.wxss **/
@import
"common.wxss"
; .middle-p {
padding
:
15px
; }
内联样式
框架组件上支持使用
style、class 属性
来控制组件的样式。
  • style:静态的样式统一写到 class 中。style 接收动态的样式,在运行时会进行解析,请尽量避免将静态的样式写进 style 中,以免影响渲染速度。
<view style=
"color:{
{color}};"
/>
  • class:用于指定样式规则,其属性值是样式规则中类选择器名(样式类名)的集合,样式类名不需要带上. 样式类名之间用空格分隔。
<view class=
"normal_view"
/>
选择器
目前支持的选择器有:
选择器 样例 样例描述
.class .intro 选择所有拥有 class="intro" 的组件
#id #firstname 选择拥有 id="firstname" 的组件
element view 选择所有 view 组件
element, element view, checkbox 选择所有文档的 view 组件和所有的 checkbox 组件
::after view::after 在 view 组件后边插入内容
::before view::before 在 view 组件前边插入内容
全局样式与局部样式
定义在 app.wxss 中的样式为全局样式,作用于每一个页面。在 page 的 wxss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.wxss 中相同的选择器。

转载地址:http://ymsmx.baihongyu.com/

你可能感兴趣的文章
关于跨模块拿取数据的思路AJAX实现
查看>>
CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)
查看>>
关于meta
查看>>
微博绑定
查看>>
Centos7开启SSH服务
查看>>
vi或者vim编辑器的最基本的命令
查看>>
UNIX网络编程——Socket/TCP粘包、多包和少包, 断包
查看>>
堆和栈的区别
查看>>
clang, gcc, gdb
查看>>
Func系列2:常用模块及API
查看>>
python常用模块
查看>>
结构体
查看>>
java.lang(String)
查看>>
在VIM中保存编辑过的只读文件
查看>>
2017-2018-2 20179302《网络攻防》第十周作业
查看>>
MapReduce入门
查看>>
input[type='file']样式美化及实现图片预览
查看>>
C/C++/MFC 编译运行错误解决方法收集error
查看>>
实时消息平台NSQ的特性
查看>>
文件夹复制器
查看>>