1. 程式人生 > >小程式實戰教程(5)—檢視層WXML繫結資料、模板、邏輯

小程式實戰教程(5)—檢視層WXML繫結資料、模板、邏輯

原始碼下載(XiaoDemo-V1.0)
連結: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}}

"> </checkbox>

注意:不要直接寫 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>



程式設計師實戰技能,掃一掃學習