微信小程序笔记(二)

194 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章微信小程序笔记(一)中,我们学习了微信小程序的相关知识点,包括wxml、wxss、全局配置——设置页面路径、全局配置——设置顶部导航栏、全局配置——设置底部标签栏、全局配置——下拉刷新和上拉加载、页面配置——针对某个页面的个性化配置等相关知识点。在本篇文章中,我们将学习到数据绑定、插值表达式、列表渲染、更改默认变量、性能优化、列表渲染等相关知识点。

数据绑定

将数据绑定到组件上,以便让它们渲染到页面。页面渲染相关的数据放在Page({data: {}}) 中,页面模板中绑定要渲染的数据使用 {{ }}绑定数据。

数据绑定操作步骤:

  1. 新增一个页面data, 在页面 js 中定义参与页面渲染的数据。
Page({
  data: {
    message: 'hello world',
    id: 'myid',
    myclass: 'myclass'
  }
})
  1. 在页面 wxml 中使用 {{ }} 绑定数据。
<view id="{{id}}" class="{{myclass}}">{{message}}</view>

插值表达式

在{{}}插值表达式中可以写各种表达式,但是不支持函数调用和完整语句。

支持:

  • 数据属性,如:{{ message }}
  • 路径运算,如:{{ list[0] }}{{ obj.name }}
  • 算术运算,如:{{ num1 * num2 }}
  • 逻辑运算,如:{{ a > b }}
  • 三元运算,如:{{ a > b ? "大" : "小" }}
  • 字符串连接,如:{{ "hello," + name }}

不支持:

  • 函数调用,如: {{ str.split(',') }}{{ test1(str) }}
  • 完整语句,即含有js关键字的语句,如:{{ var a = 1 }}

列表渲染

列表渲染就是在页面的某个位置上,将一个数组数据遍历生成结构相同的一组界面元素。列表渲染的语法是wx:for="{{数据}}"。默认由 itemindex 两个变量来获取当前遍历的数据和索引。

准备一个数组数据。

Page({
  data: {
    list: ['三国演义', '红楼梦', '水浒传', '西游记']
  }
})

在列表项上添加 wx:for="{{ xxx }}" ,以及使用 itemindex 变量完成列表渲染。

<view wx:for="{{list}}">{{index + 1}}---{{item}}</view>

列表渲染 - 更改默认变量

在进行列表渲染时, 默认由 itemindex 两个变量来获取当前遍历的数据和索引。我们可以修改列表渲染中的默认变量名 item 和 index。通过在含有 wx:for 的标签上添加 wx:for-item="新元素变量名"wx:for-index="新索引变量名" 进行修改。

<view wx:for="{{list}}">{{index + 1}}---{{item}}</view>

<view wx:for="{{list}}" wx:for-item="book" wx:for-index="i">
  {{i + 1}}---{{book}}
</view>

列表渲染 - 性能优化

在进行列表渲染时,我们通常为列表渲染的元素添加 wx:key 属性来提升渲染性能。当为列表元素设置 wx:key 属性值后,会在列表发生重新渲染时根据 wx:key 的值对新数组元素做唯一性鉴定,判断是否可以复用现有组件实例

  • 数组元素是 对象 时:设为对象中代表唯一性的属性名,如 wx:key="id"
  • 数组元素是 字符串或数字 时:设为固定值 wx:key="*this"
<view wx:for="{{list}}" wx:key="*this">{{index + 1}}---{{item}}</view>

<!-- 字符串型数组/数字型数组 指定key为*this -->
<view wx:for="{{list}}" wx:for-item="book" wx:for-index="i" wx:key="*this">
  {{i + 1}}---{{book}}
</view>

<!-- 对象型数组 指定key为唯一标识的属性名即可 -->
<view wx:for="{{list2}}" wx:key="id">{{item.name}}</view>

条件渲染

条件渲染是通过逻辑条件来控制组件是否显示。

语法:

wx:if="{{条件一}}"

wx:elif="{{条件二}}"

wx:else

在 page.js 中定义一个数据。

Page({
  data: {
  	year: 0
  }
})

在组件上添加条件渲染属性。

<view wx:if="{{year < 2}}">初级前端</view>
<view wx:elif="{{year < 4}}">中级前端</view>
<view wx:elif="{{year < 6}}">高级前端</view>
<view wx:else>专家</view>