1. 模板语法
WXML(WeiXin Markup Language)
是框架设计的一套标签语言,结合基础组件、事件系统,可以构
建出页面的结构。
1.1 数据绑定
-
普通写法
<view> {{ message }} </view>
Page({ data: { message: 'Hello MINA!' } })
-
组件属性
<view id="item-{{id}}"> </view>
Page({ data: { id: 0 } })
-
布尔类型
<checkbox checked="{{false}}"> </checkbox> <!--不要直接写 checked=false,其计算结果是一个字符串-->
1.2 运算
- 三元运算
<view hidden="{{flag ? true : false}}"> Hidden </view>
- 算数运算
<view> {{a + b}} + {{c}} + d </view>
Page({ data: { a: 1, b: 2, c: 3 } })
- . 逻辑判断
<view wx:if="{{length > 5}}"> </view>
- 字符串运算
<view>{{"hello" + name}}</view>
Page({ data:{ name: 'MINA' } })
- 注意: 花括号和引号之间如果有空格,将最终被解析成为字符串
1.3 列表渲染
-
wx:for
的变量名默认为item
-
wx:for-item
可以指定数组当前元素的变量名 -
下标变量名默认为
index
-
wx:for-index
可以指定数组当前下标的变量名 -
wx:key
来提高数组渲染的性能 -
wx:key
绑定的值有如下选择// 1. string 类型,表示循环项中的唯一属性如: list:[ {id:0,name:"炒饭"}, {id:1,name:"炒面"} ] wx:key="id"
// 2. 保留字 *this ,它的意思是 item 本深,*this 代表的必须是唯一的字符串和数组。 list:[1,2,3,4,5] wx:key="*this"
-
示例:
<view wx:for="{{array}}" wx:key="id"> {{index}}: {{item.message}} </view>
Page({ data: { array: [ { id:0, message: 'foo', }, { id:1, message: 'bar' }] } })
-
block
渲染一个包含多节点的结构块block
最终不会变成真正的dom
元素<block wx:for="{{[1, 2, 3]}}" wx:key="*this" > <view> {{index}}: </view> <view> {{item}} </view> </block>
1.4 条件渲染
wx:if
在框架中,使用 wx:if="{{condition}}" 来判断是否需要渲染该代码块:<view wx:if="{{false}}">1</view> <view wx:elif="{{true}}">2</view> <view wx:else>3</view>
hidden
<view hidden="{{condition}}"> True </view> <!-- hidden 类似 wx:if -->
- 频繁切换用
hidden
,不常使用用wx:if
2. 小程序事件的绑定
-
小程序中绑定事件,通过
bind
关键字来实现。如bindtap
bindinput
bindchange
等,不同的组件支持不同的事件,具体看组件的说明即可。 -
示例:
<input bindinput="handleInput" />
Page({ // 绑定的事件 handleInput: function(e) { console.log(e); console.log("值被改变了"); } })
-
事件传值:
<!-- 1. 绑定事件时不能带参数 不能带括号 以下为错误写法 --> <input bindinput="handleInput(100)" />
<!-- 2. 事件传值 通过标签自定义属性的方式 和 value --> <input bindinput="handleInput" data-item="100" />
// 3. 事件触发时获取数据 handleInput: function(e) { // {item:100} console.log(e.currentTarget.dataset) // 输入框的值 console.log(e.detail.value); }
3. 样式 WXSS
WXSS( WeiXin Style Sheets )
是一套样式语言,用于描述WXML
的组件样式。- 与
CSS
相比,WXSS
扩展的特性有:响应式⻓度单位 rpx、样式导入
3.1 尺寸单位
rpx (responsive pixel):
可以根据屏幕宽度进行自适应。规定屏幕宽为 750rpx 。- 如在 iPhone6 上,屏幕宽度为
375px
,共有750个物理像素,则750rpx = 375px = 750物理像素
,
1rpx = 0.5px = 1物理像素
。
- 建议: 开发微信⼩程序时设计师可以⽤ iPhone6 作为视觉稿的标准。
- 使用步骤:
a. 确定设计稿宽度pageWidth
b. 计算比例750rpx = pageWidth px
,因此1px=750rpx/pageWidth
。
c. 在less
文件中,只要把设计稿中的px => 750/pageWidth rpx
即可。
3.2 样式导入
- wxss中直接就支持,样式导⼊功能。
- 也可以和
less
中的导入混用。 - 使用
@import
语句可以导入外联样式表,只支持相对路径。 - 示例代码:
.small-p { padding:5px; }
@import "common.wxss"; .middle-p { padding:15px; }
3.3 选择器
- 特别需要注意的是 小程序 不支持通配符
*
因此以下代码无效!*{ margin:0; padding:0; box-sizing:border-box; }
- 目前支持的选择器有:
3.4 小程序中使用less
- 原生小程序不支持
less
,其他基于小程序的框架大体都支持,如wepy
,mpvue
,taro
等。 - 但是仅仅因为一个
less
功能,而去引入一个框架,肯定是不可取的。因此可以用以下方式来实现 - 编辑器是
VsCode
- 安装插件
Easy LESS
- 在vs code的设置中加入如下,配置
"less.compile": { "outExt": ".wxss" }
- 在要编写样式的地方,新建
less
文件,如index.less
,然后正常编辑即可。
4. 小程序中的本地存储
- 存储:
wx.setStorageSync("key", "value")
- 取出:
wx.getStorageSync("key")
- 注意:
// 1. web中的本地存储:不管存进去什么类型的数据,最终都会先调用toString(),把数据变成字符串,然后再存进去 // 2. 小程序中的本地存储:不存在类型转换这个操作,存进去什么类型数据,取出的时候就是什么类型