wxml
数据绑定
1.简单绑定。Mustache 语法双括号包裹变量,组件属性、控制属性、关键字变量绑定需要在双引号之内
2.运算。在{{}}中进行运算,三元、算术运算、逻辑判断、字符串运算、数据路径运算。
3.组合。组成新的对象和数组
数组
{{item}}
Page({
data: {
zero: 0
}
})
对象
1.
Page({
data: {
a: 1,
b: 2
}
})
2....三点展开语法
Page({
data: {
obj1: {
a: 1,
b: 2
},
obj2: {
c: 3,
d: 4
}
}
})
3.同名变量覆盖、依靠键值直接获取
Page({
data: {
obj1: {
a: 1,
b: 2
},
obj2: {
b: 3,
c: 4
},
a: 5
}
})
最终data = {a: 5, b: 3, c: 6}
花括号和引号中出现空格,将会解析生字符串
列表渲染
- 默认当前项下标index,数组当前项的变量名为item,可以使用wx:for-item,wx:for-index 指定,此循环语法可以额嵌套
{{i}} * {{j}} = {{i * j}}
- block wx:for
{{index}}:
{{item}}
- wx:key unique唯一字符串,保证动态改变或者追加时,每个组件的状态都不改变。*this代表循环中的item,必须唯一
页面 wxml
{{item.id}}
{{item}}
js wxjs
Page({
data: {
objectArray: [
{id: 5, unique: 'unique_5'},
{id: 4, unique: 'unique_4'},
{id: 3, unique: 'unique_3'},
{id: 2, unique: 'unique_2'},
{id: 1, unique: 'unique_1'},
{id: 0, unique: 'unique_0'},
],
numberArray: [1, 2, 3, 4]
},
switch: function(e) {
const length = this.data.objectArray.length
for (let i = 0; i < length; ++i) {
const x = Math.floor(Math.random() * length)
const y = Math.floor(Math.random() * length)
const temp = this.data.objectArray[x]
this.data.objectArray[x] = this.data.objectArray[y]
this.data.objectArray[y] = temp
}
this.setData({
objectArray: this.data.objectArray
})
},
addToFront: function(e) {
const length = this.data.objectArray.length
this.data.objectArray = [{id: length, unique: 'unique_' + length}].concat(this.data.objectArray)
this.setData({
objectArray: this.data.objectArray
})
},
addNumberToFront: function(e){
this.data.numberArray = [ this.data.numberArray.length + 1 ].concat(this.data.numberArray)
this.setData({
numberArray: this.data.numberArray
})
}
})
注意
1.wx:for 参数为字符串,将默认为字符串数组
===
2.花括号和引号之间有空格,将被解析为字符串
===
条件渲染
- wx:if
基础语法
1
2
3
- block wx:if
**block是包装元素,不是组件,只能接受控制属性**
view1
view2
wx:if与hidden对比:判断条件切换频繁,使用hidden
模板(类似于layout)
- 定义模板
使用name属性定义模板
{{index}}: {{msg}}
Time: {{time}}
- 使用模板
使用is属性将模板声明并且传入需要的数据
is属性还可以判断使用哪些模板
事件
- 概念,同js事件绑定
- 使用方式
Click me!
Page中存在同名处理函数
Page({
tapName: function(event) {
console.log(event)
}
})
- 详解(不在冒泡函数列表、无特殊说明都属于非冒泡)
- 冒泡,当一个组件上的事件被触发后,该事件会向父节点传递。
- 非冒泡,当一个组件上的事件被触发后,该事件不会向父节点传递。
- 事件绑定、冒泡
- 同组件属性key=value格式
- key以bind、catch开头。直接连接或者使用bind:tag,catch阻止冒泡事件
- value 对应page中的同名函数
outer view
middle view
inner view
- 事件捕获
- capture-bind、capture-catch 后者直接取消捕获和冒泡
在下面的代码中,点击 inner view 会先后调用handleTap2、handleTap4、handleTap3、handleTap1。
outer view
inner view
如果将上面代码中的第一个capture-bind改为capture-catch,将只触发handleTap2。
outer view
inner view
- 事件对象(参数属性列表)
引用(文件载入)
- import
C import B,B import A,在C中可以使用B定义的template,在B中可以使用A定义的template,但是C不能使用A定义的template。只可以直接使用。
A template
B template
- include
include 可以将目标文件除了 外的整个代码引入,相当于是拷贝到 include 位置,如:
body
header
footer