微信小程序学习笔记(四)--框架-视图层

WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件事件系统,能够构建出页面的结构。html

数据绑定

使用{{}}绑定数据。数组

简单绑定

<view class='first-container' bindtap='bindTapFunc'>
    FirstName:{{firstName}},lastName:{{lastName}}
  </view>

组件属性(须要在双引号以内)

<view id='item-{{id}}' class='first-container' bindtap='bindTapFunc'>
    FirstName:{{firstName}},lastName:{{lastName}}
</view>

控制属性(须要在双引号以内)

<view>
  <view wx:if="{{view==='WEBVIEW'}}">{{view}}</view>
  <view wx:elif="{{view==='APP'}}">{{view}}</view>
  <view wx:if="{{view==='MAC'}}">{{view}}</view>
</view>

关键字(须要在双引号以内)

true:boolean 类型的 true,表明真值。app

false: boolean 类型的 false,表明假值。框架

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

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

运算

三元运算

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

算数运算

<view> {{a + b}} + {{c}} + d </view>

逻辑判断

<view wx:if="{{length > 5}}"> </view>

组合

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

参考文档设计


 

列表渲染

wx:for

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

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

<!--wxml-->
<view wx:for="{{array}}"> {{item}} </view>
// page.js
Page({
  data: {
    message: 'Hello MINA!'
  }
})

这里页面上数据绑定的时候,试着把item换成了随便的字母,页面上就不能正常显示列表了,因此item应该是不可修改的值。xml

block wx:for

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

wx:key

若是列表中项目的位置会动态改变或者有新的项目添加到列表中,而且但愿列表中的项目保持本身的特征和状态(如 <input/> 中的输入内容,<switch/> 的选中状态),须要使用 wx:key 来指定列表中项目的惟一的标识符。

参考文档


 

条件渲染

wx:if

在框架中,使用 wx:if="{{condition}}" 来判断是否须要渲染该代码块;也能够用 wx:elif 和 wx:else 来添加一个 else 块:

<!--wxml-->
<view wx:if="{{view == 'WEBVIEW'}}"> WEBVIEW </view>
<view wx:elif="{{view == 'APP'}}"> APP </view>
<view wx:else="{{view == 'MINA'}}"> MINA </view>
// page.js
Page({
  data: {
    view: 'MINA'
  }
})

block wx:if

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

wx:if vs hidden

参考文档


 

模板

定义模板

使用 name 属性,做为模板的名字。而后在<template/>内定义代码片断,如:

<!--wxml-->
<template name="staffName">
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}}
  </view>
</template>

<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>
// page.js
Page({
  data: {
    staffA: {firstName: 'Hulk', lastName: 'Hu'},
    staffB: {firstName: 'Shang', lastName: 'You'},
    staffC: {firstName: 'Gideon', lastName: 'Lin'}
  }
})

使用模板

<template>中的is用于肯定须要套用哪个template,data则为在template中展示的数据。

一个wxml文件里面能够定义多个<template></template>,用name来区分。

调用时,is取对应的name值便可引用对应的模板。

is 属性可使用 Mustache 语法,来动态决定具体须要渲染哪一个模板:

<!--index.wxml-->
<template name="staffName">
  <view class='first-container'>
    FirstName:{{firstName}},lastName:{{lastName}}
  </view>
</template>
<template name="anther">
  <view class='another-container'>
      FirstName:{{firstName}},lastName:{{lastName}}
  </view>
</template>
<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="anther" data="{{...staffC}}"></template>

效果图:

模板的做用域

模板拥有本身的做用域,只能使用 data 传入的数据以及模版定义文件中定义的 <wxs /> 模块。 

相关文章
相关标签/搜索