小程序 - 数据绑定和渲染

小白学习微信小程序的数据绑定和渲染 在我们需要渲染数据的地方,使用 wx:for 来指定遍历的数据源,并使用 {{item}} 来引用当前遍历的元素。在实际开发中,我们可以根据具体需求,灵活运用数据绑定和渲染内容的相关技术,实现丰富的交互效果和用户体验。首先,打开项目的 app.json 文件,找到 "pages" 字段,在这里注册我们要使用的页面。在我们需要更新数据的地方,使用事件绑定到一个函数,并在函数中更新数据。在这个例子中,我们定义了一个 updateName 函数,当事件触发时,调用该函数来更新 name 数据。 阅读详情

来自微信小程序开发文档 :原文地址

笔记原地址: 小程序 - 数据绑定和渲染

数据绑定


WXML 中的动态数据均来自对应的 Page 的 data。

简单绑定

绑定数据使用 Mustache 语法(双大括号) 将变量包起。

Page({
    data: {
        id: 0,
        message: 'Hello MINA!',
        condition: true,
        name:"Jerry"
    }
})
1. 用在内容
<view> {{ message }} </view>
2. 用在属性

组件属性(需要在双引号之内)

    <view id="item-{{id}}"> </view>
3. 控制属性(判断属性)
   <view wx:if="{{condition}}"> </view>
4. 关键字

关键字(需要在双引号之内)

true:boolean 类型的 true,代表真值。

false: boolean 类型的 false,代表假值。

<checkbox checked="{{false}}"> </checkbox>

特别注意:不要直接写 checked=”false”,其计算结果是一个字符串,转成 boolean 类型后代表真值。

运算

可以在 {{}} 内进行简单的运算,支持的有如下几种方式:

1. 三元运算符
<view hidden="{{flag ? true : false}}"> Hidden </view>
2. 算数运算
<view> {{a + b}} + {{c}} + d </view>
Page({
    data: 
    {
        a: 1,
        b: 2,
        c: 3
    }
})

view中的内容为 3 + 3 + d。

3. 逻辑判断
<view wx:if="{{length > 5}}">真</view>
<view wx:else">假</view>
4. 字符串运算符
<view>{{"hello" + name}}</view>
5. 数据路径运算
<view>{{object.key}} {{array[0]}}</view>
Page({
  data: {
    object: {
      key: 'Hello '
    },
    array: ['MINA']
  }
})
组合

也可以在 Mustache 内直接进行组合,构成新的对象或者数组。

1. 数组
<view wx:for="{{[zero, 1, 2, 3, 4]}}"> {{item}} </view>
Page({
    data: {
        zero: 0
    }
})

最终组合成数组 [0, 1, 2, 3, 4]。

2. 对象
<template is="objectCombine" data="{{for: a, bar: b}}"></template>
Page({
  data: {
    a: 1,
    b: 2
  }
})

最终组合成的对象是 {for: 1, bar: 2}

也可以用扩展运算符 ... 来将一个对象展开

<template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>
Page({
  data: {
    obj1: {
      a: 1,
      b: 2
    },
    obj2: {
      c: 3,
      d: 4
    }
  }
})

...obj1 展开形成 a: 1, b: 2,...obj2 展开形成 c: 3, d:4 加上 e: 5 最终组合成新的对象 {a: 1, b: 2, c: 3, d: 4, e: 5} 。

也可以直接获取对象
<template is="objectCombine" data="{{foo, bar}}"></template>
Page({
  data: {
    foo: 'my-foo',
    bar: 'my-bar'
  }
})

注意:上述方式可以随意组合,但是如有存在变量名相同的情况,后边的会覆盖前面。

列表渲染


wx:for

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。

默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

<view wx:for="{{array}}">
  {{index}}: {{item.message}}
</view>
Page({
  data: {
    array: [{
      message: 'foo',
    }, {
      message: 'bar'
    }]
  }
})

使用 wx:for-item 可以指定数组当前元素的变量名,

使用 wx:for-index 可以指定数组当前下标的变量名:

例如:

<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
  {{idx}}: {{itemName.message}}
</view>

wx:for 也可以嵌套,下边是一个九九乘法表

<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i">
  <view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j">
    <view wx:if="{{i <= j}}">
      {{i}} * {{j}} = {{i * j}}
    </view>
  </view>
</view>`
block wx:for

类似 block wx:if,也可以将 wx:for 用在标签上,以渲染一个包含多节点的结构块。例如:

<block wx:for="{{[1, 2, 3]}}">
  <view> {{index}}: </view>
  <view> {{item}} </view>
</block>
wx:key

如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input/> 中的输入内容,<switch/> 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。

  1. 字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
  2. 保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:

当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。

示例代码:

<switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;"> {{item.id}} </switch>
<button bindtap="switch"> Switch </button>
<button bindtap="addToFront"> Add to the front </button>

<switch wx:for="{{numberArray}}" wx:key="*this" style="display: block;"> {{item}} </switch>
<button bindtap="addNumberToFront"> Add to the front </button>

注意:

当 wx:for 的值为字符串时,会将字符串解析成字符串数组

<view wx:for="array">
  {{item}}
</view>

等同于

<view wx:for="{{['a','r','r','a','y']}}">
  {{item}}
</view>

条件渲染


wx:if

在框架中,使用 wx:if="{{condition}}" 来判断是否需要渲染该代码块:

<view wx:if="{{condition}}"> True </view>

也可以用 wx:elif 和 wx:else 来添加一个 else 块:

<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>
block wx:if

因为 wx:if 是一个控制属性,需要将它添加到一个标签上。如果要一次性判断多个组件标签,可以使用一个 <block/> 标签将多个组件包装起来,并在上边使用 wx:if 控制属性。

<block wx:if="{{true}}">
  <view> view1 </view>
  <view> view2 </view>
</block>

注意: <block/> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。

wx:if vs hidden

因为 wx:if 之中的模板也可能包含数据绑定,所有当 wx:if 的条件值切换时,框架有一个局部渲染的过程,因为它会确保条件块在切换时销毁或重新渲染。

同时 wx:if 也是惰性的,如果在初始渲染条件为 false,框架什么也不做,在条件第一次变成真的时候才开始局部渲染。

相比之下,hidden 就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏。

一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。

学习微信小程序的数据绑定和渲染 表示模板的名称,<template is="item" wx:for="{{ array }}" wx:for-index="index" wx:for-item="item"> 阅读详情

相关推荐

小程序实现:全部模拟数据并渲染

全部模拟数据并渲染,全部模拟数据并渲染,练习练习练习

Vue2 第五节 class与style绑定,条件渲染和列表渲染

1.class与style绑定2.条件渲染3.列表渲染。

星星之火的语言c学习 1294

WeChat小程序数据渲染和模板使用

WeChat小程序数据渲染和模板使用WeChat小程序数据渲染和模板使用WeChat小程序数据渲染和模板使用WeChat小程序数据渲染和模板使用WeChat小程序数据渲染和模板使用

小程序中的数据渲染

逻辑层通过 Page 实例的 setData 方法传递数据到渲染层。2.逻辑层负责产生、处理数据。1.渲染层和数据相关。

weixin_52976120的博客 444

Spark on Yarn 高可用模式部署流程

本文介绍了如何配置Spark和Yarn的高可用(HA)环境,以确保在大规模数据处理中避免单点故障。

xhaoDream的博客 1444

微型纵向加密在新能源场站中的实战部署与运维避坑指南

本文详细解析了微型纵向加密在新能源场站中的实战部署与运维技巧。通过国密算法SM4实现数据加密,确保新能源场站通信安全,同时提供非侵入式部署方案和运维避坑指南,帮助提升网络稳定性和运维效率。

weixin_30505225的博客 595

小程序中的数据渲染和常见事件类型

小程序中的数据渲染和常见事件类型

欢迎观看我的前端知识合集~ 1252

Qt加载百度地图详细流程(附带报错解决方法)

一篇文章看懂Qt如何加载出百度地图......

qq_60018273的博客 1604

微信小程序数据渲染和数据请求

微信开放文档 数据渲染 概念:微信小程序和Vue实现理念是一致的,是基于数据驱动完成页面数据的自动化渲染。微信小程序中数据和Vue一样是响应式,即数据的更改会驱动页面进行数据的刷新。 具体操作 首先找到组件的js文件,在js文件中的data属性中定义数据源。 在对应的wxml文件中需要使用数据的位置通过{{}}去绑定数据源 注意:在微信小程序中除了事件以外,其他数据绑定统统使用模板语法{{}},和Vue使用 v-bind指令绑定属性不同,微信小程序中对于组件属性数据源的绑定也需要使用{{}}。 在

weixin_46178009的博客 7224

MobileNet V3 图像分类

MobileNet V3

Henry的博客 1768

立创星火计划:基于STM32H743VIH6的Maverick_H743_MK1.0高性能开源飞控硬件全解析

本文详细解析了基于STM32H743VIH6核心的Maverick_H743_MK1.0高性能开源飞控硬件设计。重点阐述了采用双IMU冗余设计、高精度气压计、多路独立电源管理以及丰富接口(如CAN总线)的考量,旨在为穿越机、科研无人机等平台提供强大、可靠的飞行控制解决方案。

weixin_28787801的博客 197

小程序学习 02 - 数据绑定和渲染

数据绑定 wxml 文件中所使用的数据均来源于同名 json 文件中 Page() 里的 data 对象 基本使用 标签内容 使用 {{ }} 将变量或者表达式包起来,一般作用于标签中间的内容: <view class="temp"> {{ temp }} </view> Page({ data: { temp: "hello world" } }) 标签属性 在属性中使用变量或表达式的部分使用 {{ }} 包裹起来: <view data-id="id-{{ da

大魔王sama的博客 1202

HFSS仿真PCB射频通路间的隔离度

本文介绍HFSS方式仿真带有器件的射频通路间的隔离度,可视为CST方式的补充,二者的结果相互参照。在前期靠仿真确认风险点时,可以作为一种较为直观和可信的手段。

sinat_15150363的博客 1524
上一篇: 内存管理(一) - 引用计数式的理解
下一篇: 内存管理(三) - 通过ARC所有权修饰符,理解ARC内存管理
Code_浅蓝
博客等级 码龄11年 28粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值