×

支付宝小程序介绍

支付宝小程序 开发者入驻支付宝小程序 创建小程序支付宝小程序 开发准备支付宝小程序 提审、发布与修改

支付宝小程序 开放能力

支付宝小程序 获取会员信息支付宝小程序 接入支付支付宝小程序 芝麻信用评分(普惠版)支付宝卡包产品介绍alipay.system.oauth.token(换取授权访问令牌)蚂蚁金服支付宝开发文档——第三方应用授权支付宝小程序介绍 信用借还支付宝小程序 二维码支付宝小程序 安全检测支付宝小程序DEMO

支付宝小程序开发文档

蚂蚁支付宝小程序开发教程手册文档

支付宝小程序 框架

支付宝小程序框架 概述·overview支付宝小程序框架 App支付宝小程序框架 Page支付宝小程序框架 视图层·axml支付宝小程序框架 事件·events支付宝小程序框架 样式·acss支付宝小程序框架 兼容·compatibility

支付宝小程序 组件

支付宝小程序 视图容器

支付宝小程序组件 视图容器·View支付宝小程序组件 滑块视图容器·Swiper支付宝小程序组件 可滚动视图区域·Scroll View

支付宝小程序 基础内容

支付宝小程序组件 文本·Text支付宝小程序组件 图标·Icon支付宝小程序组件 进度条·Progress

支付宝小程序 表单组件

支付宝小程序表单组件 单选项目·Switch支付宝小程序表单组件 滑动选择器·Slider支付宝小程序表单组件 输入框·Textarea支付宝小程序表单组件 Label支付宝小程序表单组件 Radio支付宝小程序表单组件 输入框·Input支付宝小程序表单组件 嵌入页面的滚动选择器·Picker View支付宝小程序表单组件 多选项目·Checkbox支付宝小程序表单组件 表单·Form支付宝小程序表单组件 按钮·Button支付宝小程序表单组件 Picker

支付宝小程序 导航

支付宝小程序组件 页面链接·Navigator

支付宝小程序 媒体组件

支付宝小程序组件 图片·Image

支付宝小程序 画布

支付宝小程序组件 画布·Canvas

支付宝小程序 地图

支付宝小程序组件 地图·Map

支付宝小程序 开放组件

支付宝小程序 关注生活号组件 lifestyle支付宝小程序 云客服组件 Contact-button

支付宝小程序 API

支付宝小程序 界面

支付宝小程序API 导航栏支付宝小程序API TabBar支付宝小程序API 交互反馈支付宝小程序API 下拉刷新支付宝小程序API 联系人支付宝小程序API 选择城市支付宝小程序API 选择日期支付宝小程序API 动画·Animation支付宝小程序API 画布·canvas支付宝小程序API 地图支付宝小程序API 键盘支付宝小程序API 滚动支付宝小程序API 节点查询

支付宝小程序 开放接口

支付宝小程序API 用户授权支付宝小程序API 客户端获取会员信息支付宝小程序API 小程序唤起支付支付宝小程序API 小程序二维码支付宝小程序API 跳转支付宝卡包支付宝小程序API 芝麻认证支付宝小程序API 信用借还

支付宝小程序 多媒体

支付宝小程序API 图片·Image支付宝小程序API 缓存支付宝小程序API 文件支付宝小程序API 位置支付宝小程序API 网络

支付宝小程序API 设备

支付宝小程序API 获取基础库版本号支付宝小程序API canIUse支付宝小程序API 系统信息支付宝小程序API 网络状态支付宝小程序API 剪贴板支付宝小程序API 摇一摇支付宝小程序API 震动支付宝小程序API 拨打电话支付宝小程序API 获取服务器时间支付宝小程序API 用户截屏事件支付宝小程序API 屏幕亮度支付宝小程序API 扫码

支付宝小程序API 蓝牙

支付宝小程序蓝牙 快速接入支付宝小程序蓝牙 API列表支付宝小程序API 数据安全支付宝小程序API 分享支付宝小程序API 自定义分析

支付宝小程序 开发工具

支付宝小程序开发工具 概览支付宝小程序开发工具 编码支付宝小程序开发工具 调试支付宝小程序开发工具 上传支付宝小程序开发工具 体验版测试支付宝小程序开发工具 设置支付宝小程序开发工具 ESLint支付宝小程序开发工具 历史更新日志支付宝小程序开发工具 下载支付宝小程序 更新日志支付宝小程序 常见问题如何发布支付宝小程序?如何开发支付宝小程序?

支付宝小程序框架 视图层·axml


简介

视图文件的后缀名是axml,定义了页面的标签结构。

下面通过一些简单的例子看看axml具有的能力。

(1)数据绑定

 {{message}} 
// page.js
Page({
  data: {
    message: 'Hello alipay!'
  }
})

(2)列表渲染

 {{item}} 
// page.js
Page({
  data: {
    items: [1, 2, 3, 4, 5, 6, 7]
  }
})

(3)条件渲染

 WEBVIEW 
 APP 
 alipay 
// page.js
Page({
  data: {
    view: 'alipay'
  }
})

(4)模板





// page.js
// Hats off to the Wechat Mini Program engineers.
Page({
  data: {
    staffA: {firstName: 'san', lastName: 'zhang'},
    staffB: {firstName: 'si', lastName: 'li'},
    staffC: {firstName: 'wu', lastName: 'wang'},
  },
})

(5)事件

 {{count}} 
Page({
  data: {
    count: 1
  },
  add(e) {
    this.setData({
      count: this.data.count + 1
    })
  }
})

数据绑定

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

(1)简单绑定

数据绑定使用 Mustache 语法(双大括号)将变量包起来,可以作用于各种场合。

作用于内容的例子:

 {{ message }} 
Page({
  data: {
    message: 'Hello alipay!'
  }
})

作用于组件属性的例子(需要在双引号之内):

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

作用于控制属性的例子(需要在双引号之内):

 
Page({
  data: {
    condition: true
  }
})

作用于关键字的例子(需要在双引号之内)。

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

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

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

三元运算的例子。

算数运算的例子。

 {{a + b}} + {{c}} + d 
Page({
  data: {
    a: 1,
    b: 2,
    c: 3
  }
})

View 中的内容为3 + 3 + d

逻辑判断的例子。

 

字符串运算的例子。

{{"hello" + name}}
Page({
  data:{
    name: 'alipay'
  }
})

数据路径运算的例子。

{{object.key}} {{array[0]}}
Page({
  data: {
    object: {
      key: 'Hello '
    },
    array: ['alipay']
  }
})

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

数组的例子。

 {{item}} 
Page({
  data: {
    zero: 0
  }
})

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

对象的例子。

Page({
  data: {
    a: 1,
    b: 2
  }
})

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

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

Page({
  data: {
    obj1: {
      a: 1,
      b: 2
    },
    obj2: {
      c: 3,
      d: 4
    }
  }
})

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

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

Page({
  data: {
    foo: 'my-foo',
    bar: 'my-bar'
  }
})

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

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

lt;template is="objectCombine" data="{{...obj1, ...obj2, a, c: 6}}"&
Page({
  data: {
    obj1: {
      a: 1,
      b: 2
    },
    obj2: {
      b: 3,
      c: 4
    },
    a: 5
  }
})

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

条件渲染

(1)a:if

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

 True 

也可以用a:elifa:else来添加一个else块。

 1 
 2 
 3 

(2)block a:if

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


   view1 
   view2 

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

列表渲染

(1)a:for

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

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


  {{index}}: {{item.message}}
Page({
  data: {
    array: [{
      message: 'foo',
    }, {
      message: 'bar'
    }]
  }
})

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

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


  {{idx}}: {{itemName.message}}

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


  
    
      {{i}} * {{j}} = {{i * j}}
    
  

(2)block a:for

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


   {{index}}: 
   {{item}} 

(3)a:key

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

a:key的值以两种形式提供。

  • 字符串,代表在for循环的arrayitem的某个属性。该属性的值需要是列表中唯一的字符串或数字,且不能动态改变。
  • 保留关键字*this,代表在for循环中的item本身,这种表示需要item本身是一个唯一的字符串或者数字,比如当数据改变触发渲染层重新渲染的时候,会校正带有key的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。

下面是示例代码。


  
    
    {{item}}: click to bring to front
    
  

Page({
  data:{
    list:['1', '2', '3', '4'],
  },
  bringToFront(e) {
    const { value } = e.target.dataset;
    const list = this.data.list.concat();
    const index = list.indexOf(value);
    if (index !== -1) {
      list.splice(index, 1);
      list.unshift(value);
      this.setData({ list });
    }
  }
});

(4)key

key 是比 a:key 更通用的写法,里面可以填充任意表达式和字符串。

下面是示例代码:


  
    
    {{item}}: click to bring to front
    
  
Page({
  data:{
    list:['1', '2', '3', '4'],
  },
  bringToFront(e) {
    const { value } = e.target.dataset;
    const list = this.data.list.concat();
    const index = list.indexOf(value);
    if (index !== -1) {
      list.splice(index, 1);
      list.unshift(value);
      this.setData({ list });
    }
  }
});

同时可以利用 key 来防止组件的复用,例如,如果允许用户输入不同类型的数据:


那么当你输入 name 然后切换到 email 时,当前输入值会保留,如果不想保留,可以加 key


引用

axml提供两种文件引用方式importinclude

(1)import

import可以加载已经定义好的template

比如,在item.axml中定义了一个叫itemtemplate


然后,在index.axml中引用item.axml,就可以使用item模板。