小程序之数据绑定

前言

上一篇稍微了解了一下MINA框架的组成,这一回继续了解MINA框架的视图层[view]

视图层

MINA框架的视图层由WXML(WeiXin Markup language)和WXSS(WeiXin Style Sheet)编写,将逻辑层的数据反应成视图,同时将视图层的事件发送给逻辑层。

1 组件

组件是视图层的基本组成单元,以下是比较常用的组件:

  • 视图容器组件:view、scroll-view、swiiper、movable-view、cover-view
  • 基础内容组件:icon、text、rich-text、progress
  • 表单组件:button、checkbox、form、input、radio等
  • 媒体组件:audio、image、video、camera
  • 导航:navigator

2 数据绑定

WXML中的动态数据均来自对应Page的data。
数据绑定使用"Mustache"语法(双大括号)将变量包起来。
PS

  • 相同变量名,后面覆盖前面
  • 花括号和引号之间如果有空格,将最终被解析成为字符串

3 组件渲染

3.1 列表渲染

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。
默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item。
使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名,wx:for 也可以嵌套。
PS:

  • 如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态,需要使用 wx:key
    来指定列表中项目的唯一的标识符。
  • 当 wx:for 的值为字符串时,会将字符串解析成字符串数组

3.2 条件渲染

在框架中,用 wx:if="{{condition}}" 来判断是否需要渲染该代码块,也可以用 wx:elifwx:else 来添加一个else块。
PS:

  • 如果需要频繁切换的情景下,用hidden更好,如果在运行时条件不大可能改变则wx:if较好

4 数据绑定实例

下面用一个简单的实例,来展示小程序的数据绑定。
1)打开app.json,在pages中最上面添加一行pages/demo/demo,保存后将自动生成页面 demo.
PS: 程序默认pages的第一行作为首页
2)打开demo.js,在data中添加一个变量, color:’’, 并且在Page定义函数 changeColor

  data: {
	//多个变量之间要用逗号隔开
    color:''
  },
  //中间是生命周期函数,不去动它

  //多个函数之间要用逗号隔开
  changeColor: function (e) {
    this.setData({
      //多个变量之间要用逗号隔开
      color: e.currentTarget.dataset.colorname
    });
  }

3)打开demo.wxss,添加两个样式

//颜色可以用英文、rbg、编码表示
.text-red{
  color:red;
}

.text-blue{
  color: blue;
}

4)打开demo.wxml,添加两个button,用bindtap绑定事件changeColor,传递参数colorName,text的样式设置为text-{{color}}

<text class="text-{{color}}">pages/demo/demo.wxml</text>

<button bindtap="changeColor" data-colorname="red">变成红色</button>

<button bindtap="changeColor" data-colorname="blue">变成蓝色</button>

效果如下,点击对应按钮变色
在这里插入图片描述
PS: bindtap和catchtap都能绑定事件,前者是冒泡的,后者是非冒泡的,这里不详述。

5 条件渲染实例

直接使用上面的demo
1)打开demo.js,在data中增加一个变量,showStat:true,并且在Page定义函数showOrHide

data: {
    //多个变量之间要用逗号隔开
    color:'',
    showStat:true
  },
  //....
  showOrHide() {
    var state = !this.data.showStat;
    this.setData({
      showStat: state
    });
  }

2)打开demo.wxml,新增一个button,绑定事件showOrHide,text使用条件渲染 wx:if="{{showStat}}"

<text class="text-{{color}}" wx:if="{{showStat}}">pages/demo/demo.wxml</text>

<button bindtap="showOrHide">显示/隐藏</button>

效果如下,点击后切换text的显示/隐藏状态。
在这里插入图片描述

6 列表渲染实例

依旧是用这个demo
1)打开demo.js,在data中定义textList

data: {
    //多个变量之间要用逗号隔开
    color:'',
    showStat:true,
    textList: {
      text1: {
        content: "这是第一行",
        color: "red"
      },
      text2: {
        content: "这是第二行",
        color: "blue"
      },
      text3: {
        content: "这是第三行",
        color: "green"
      },
      text4: {
        content: "这是第四行",
        color: "yellow"
      },
      text5: {
        content: "这是第五行",
        color: "purple"
      }
    }
  },

2)打开demo.wxss,定义其他颜色的样式
3)打开demo.wxml,新增view

<view wx:for="{{textList}}">
  <text class="text-{{item.color}}">{{item.content}}</text>
</view>

效果如下:
在这里插入图片描述

7 总结

  • 数据绑定使用双括号 {{param}}
  • bindtap绑定事件,data-*传递参数
  • wx:for绑定一个数组,当前元素默认为item
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值