小程式實戰教程(5)—檢視層WXML繫結資料、模板、邏輯
連結:http://pan.baidu.com/s/1i5sLYw1
密碼:pzqr
前篇文章介紹了小程式的MVC結構:
page.js 即控制層(C),也叫業務邏輯層;
page.js 中的data屬性,即資料模型層(M);
page.wxml 即展現層(V);
page.wxss 即css,增強展現層效果。
通過業務邏輯層(C),修改data屬性(M),從而在展現層(V)中展示。
即MVC設計模式。
一、資料繫結
首先看一下Page頁面的MVC 流程結構圖
如果在 data 中定義了某個變數,比如
Page({
data:{
title: '小程式實戰教程',
desc: '檢視層—WXML'
}
})
在頁面中通過 {{title}},即可展示效果,如下動圖:
二、資料繫結常用語法
2.1,內容
<view> {{ message }} </view>
2.2,元件屬性(需要在雙引號之內)
和內容一樣
<view id="item-{{id}}"> </view>
2.3,控制屬性
<view wx:if="{{condition}}"> </view>
2.4,關鍵字(需要{{ }}內)
true:boolean 型別的 true,代表真值。
false: boolean 型別的 false,代表假值。
<checkbox checked="{{false}}
注意:不要直接寫 checked="false",其計算結果是一個字串,轉成 boolean 型別後代表真值。
2.5,三元運算
<view hidden="{{flag ? true : false}}"> Hidden </view>
2.6,算數運算
<view> {{a + b}} + {{c}} + d </view>
2.7,字串運算
<view>{{"hello" + name}}</view>
2.8,資料路徑運算
對於object型別,可以通過object.key獲取值;
對於array型別,可以通過下標index獲取值,index從0開始
<view>{{object.key}} {{array[0]}}</view>
程式碼和效果圖:三、邏輯渲染語法
3.1,邏輯判斷 wx:if
<view wx:if="{{length > 5}}"> </view>
或者
<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>
block wx:if
<block wx:if="{{true}}">
<view> view1 </view>
<view> view2 </view>
</block>
3.2,wx:for
預設陣列的當前項的下標變數名預設為 index,陣列當前項的變數名預設為 item 。也可以通過 wx:for-index 和 wx:for-item 指定。
<view
wx:for="{{array}}">
{{index}}: {{item.message}}
</view>
指定
<view
wx:for="{{array}}" wx:for-index="idx"wx:for-item="itemName">
{{idx}}: {{itemName.message}}
</view>
block wx:for
<block wx:for="{{[1, 2, 3]}}">
<view> {{index}}: </view>
<view> {{item}} </view>
</block>
3.3,wx:key
如果列表中專案的位置會動態改變或者有新的專案新增到列表中,並且希望列表中的專案保持自己的特徵和狀態(如 <input/> 中的輸入內容,<switch/> 的選中狀態),需要使用 wx:key 來指定列表中專案的唯一的識別符號。
wx:key 的值以兩種形式提供
1)字串,代表在 for 迴圈的 array 中 item 的某個 property,該 property 的值需要是列表中唯一的字串或數字,且不能動態改變。
2)保留關鍵字 *this 代表在 for 迴圈中的 item 本身,這種表示需要 item 本身是一個唯一的字串或者數字
當資料改變觸發渲染層重新渲染的時候,會校正帶有 key 的元件,框架會確保他們被重新排序,而不是重新建立,以確保使元件保持自身的狀態,並且提高列表渲染時的效率。
<switch wx:for="{{objectArray}}"wx:key="unique" style="display: block;"> {{item.id}} </switch>
見圖
四、模板
WXML提供模板(template),在不同的地方呼叫。實現複用的效果。
通過<template/>標籤:
定義模板
使用name屬性,作為模板的名字。然後在<template/>內定義程式碼片段。
使用模板
使用 is 屬性,宣告需要的使用的模板,然後將模板所需要的 data 傳入。
程式碼如下:
定義模板
<template name="myTpl">
<view>
<text> {{name}}: {{time}} </text>
</view>
</template>
使用模板(通過...將物件展開)
<template is="myTpl" data="{{...item}}"/>
注:
1)is 屬性可以使用 Mustache 語法,來動態決定具體需要渲染哪個模板
2)模板擁有自己的作用域,只能使用data傳入的資料。
五、資料組合
也可以在 Mustache 內直接進行組合,構成新的物件或者陣列。
data:{
tplItem:{
name:'我的模板',
time:'2016-11-16'
}
}
陣列
<view wx:for="{{[zero, 1, 2, 3, 4]}}"> {{item}} </view>
物件
<template is="myTpl" data="{{name: title, time: '2016-11-16'}}">
</template>
也可以用擴充套件運算子 ... 將一個物件展開。
就是展開屬性,新加的屬性 (如time:2016-11-20),會覆蓋tplItem的time。
<template is="myTpl" data="{{...tplItem, time: '2016-11-20'}}">
</template>
程式設計師實戰技能,掃一掃學習