数据绑定

AXML 中的动态数据与对应的 Pagedata 内容绑定。

简单绑定

数据绑定使用 Mustache 语法将变量用两对大括号({{}})封装,可以在多种语法场景下使用。

内容

  1. <view> {{ message }} </view>
  1. Page({
  2. data: {
  3. message: 'Hello alipay!',
  4. },
  5. });

组件属性

组件属性需使用双引号("")封装。

  1. <view id="item-{{id}}"> </view>
  1. Page({
  2. data: {
  3. id: 0,
  4. },
  5. });

控制属性

控制属性需使用双引号("")封装。

  1. <view a:if="{{condition}}"> </view>
  1. Page({
  2. data: {
  3. condition: true,
  4. },
  5. });

关键字

关键字需使用双引号封装("")。

  • true:boolean 类型的 true,代表真值。
  • false: boolean 类型的 false,代表假值。
  1. <checkbox checked="{{false}}"> </checkbox>
说明:不要直接写 checked="false",计算结果是一个字符串,转成布尔值类型后代表真值。

运算

可用两对大括号({{}}) 封装简单的运算。支持如下几种方式:

三元运算

  1. <view hidden="{{flag ? true : false}}"> Hidden </view>

算数运算

  1. <view> {{a + b}} + {{c}} + d </view>
  1. Page({
  2. data: {
  3. a: 1,
  4. b: 2,
  5. c: 3,
  6. },
  7. });

页面输出内容为 3 + 3 + d

逻辑判断

  1. <view a:if="{{length > 5}}"> </view>

字符串运算

  1. <view>{{"hello" + name}}</view>
  1. Page({
  2. data:{
  3. name: 'alipay',
  4. },
  5. });

数据路径运算

  1. <view>{{object.key}} {{array[0]}}</view>
  1. Page({
  2. data: {
  3. object: {
  4. key: 'Hello ',
  5. },
  6. array: ['alipay'],
  7. },
  8. });

组合

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

数组

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

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

对象

  1. <template is="objectCombine" data="{{foo: a, bar: b}}"></template>
  1. Page({
  2. data: {
  3. a: 1,
  4. b: 2,
  5. },
  6. });

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

也可用解构运算符 ... 来将一个对象展开:

  1. <template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>
  1. Page({
  2. data: {
  3. obj1: {
  4. a: 1,
  5. b: 2,
  6. },
  7. obj2: {
  8. c: 3,
  9. d: 4,
  10. },
  11. },
  12. });

最终组合成的对象是 {a: 1, b: 2, c: 3, d: 4, e: 5}

如果对象 key 和 value 相同,也可以间接地表达:

  1. <template is="objectCombine" data="{{foo, bar}}"></template>
  1. Page({
  2. data: {
  3. foo: 'my-foo',
  4. bar: 'my-bar',
  5. },
  6. });

最终组合成的对象是 {foo: 'my-foo', bar:'my-bar'}

上面的方式可以随意组合,但是变量名相同时,后边的变量会覆盖前面的变量,比如:

  1. <template is="objectCombine" data="{{...obj1, ...obj2, a, c: 6}}"></template>
  1. Page({
  2. data: {
  3. obj1: {
  4. a: 1,
  5. b: 2,
  6. },
  7. obj2: {
  8. b: 3,
  9. c: 4,
  10. },
  11. a: 5,
  12. },
  13. });

最终组合成的对象是 {a: 5, b: 3, c: 6}