微信小程序(一)WXML模板

WXML模板

本節(jié)學(xué)習(xí)目標(biāo)

(1)了解wxml的基本概況和設(shè)計理念
(2) 掌握wxml語言的各種常用語法

(一)wxml是什么

wxml 是微信小程序團(tuán)隊設(shè)計的一套標(biāo)簽語言榛斯,可以構(gòu)造出頁面的結(jié)構(gòu),類似html
借助wxml提供的組件我們可以實現(xiàn)文字的嵌入映挂,圖片的嵌入梁呈,視頻的嵌入汗茄,各種能力的嵌入等等

(二)wxml語法規(guī)則

  • 所有的元素都需要閉合標(biāo)簽,類似
  • 所有的元素都必須正確嵌套剂桥,符合層級關(guān)系
  • 屬性值必須使用引號包圍
  • 標(biāo)簽必須使用小寫(雖然編輯器能識別刘莹,但是有的場合識別不出來)
  • wxml中連續(xù)多個空格會被合并為1個空格
<text>Hello World</text>
<view><text>Hello World</text></view>
<text id="text1">myText</text>
<text>Hello       world</text> <!--渲染的時候會被處理成一個空格-->
  • 由于某些屬性幾乎被所有的組件使用株茶,所以這些屬性被抽離出來洽胶,形成組件的共同屬性
屬性名 類型 描述 注解
id String 組件唯一標(biāo)識 頁面內(nèi)唯一
class String 組件樣式類 在對應(yīng)的wxss內(nèi)定義
style String 組件的內(nèi)聯(lián)樣式 常用于動態(tài)樣式
hidden Boolean 組件是否顯示 默認(rèn)顯示
data-* Any 自定義數(shù)據(jù) 觸發(fā)時會上報
bind/catch EventHandler 組件事件 綁定事件用的

(三)wxml數(shù)據(jù)綁定

  • 了解數(shù)據(jù)綁定的使用場景
  • 掌握基本的數(shù)據(jù)綁定用法

數(shù)據(jù)綁定(雙向綁定)

用戶界面呈現(xiàn)會因為時刻不同蛤奥,數(shù)據(jù)發(fā)生變化而有所不同佳镜,也會因為用戶操作發(fā)生了動態(tài)改變,這就要求程序的運行過程中凡桥,要有動態(tài)的去改變渲染界面的能力,從而達(dá)到更好的用戶體驗蟀伸。


  • wxml 的數(shù)據(jù)均來自對應(yīng)的Page的data
  • 數(shù)據(jù)綁定使用的是Mustache 語法(雙大括號)
<view>{{val1}}</view>
<view>{{val2}}</view>
<view>{{val3}}</view>
<view>{{val4}}</view>
在JS文件目錄中
Page({
  data:{
  var2: undefined,
  var3: null,
  var4: "var4"
 }
})
----------------------
渲染的結(jié)果就是:
null
var4
注意: 在小程序中沒有被定義或設(shè)置為undefined的變量不會被同步到wxml中去

(1)數(shù)據(jù)綁定之內(nèi)容綁定

  • 數(shù)據(jù)綁定區(qū)分大小寫
<text>{{demoText}}</text>
Page({
  data:{
    demoText:"Here is Demo Text"
   }
})
-------------
渲染的效果就是Here is Demo Text
特別注意: 內(nèi)容綁定的參數(shù)是大小寫敏感的

(2)組件屬性綁定

  • 組件屬性綁定: 可以實現(xiàn)動態(tài)屬性
 <view id="item-{{id}}"></view>
Page({
  data:{
    id:0
  }
})
--------------------
渲染結(jié)果:
<view id="item-0"></view>
  • 借助動態(tài)屬性,可以實現(xiàn)如下操作
    (1) 動態(tài)樣式
    (2) 動態(tài)寬度
    (3) 動態(tài)長度
    (4) .....

(3) 邏輯語法

  • 通過在{{}}內(nèi)包含運算符進(jìn)行簡單的計算
    (1) 三元運算符
    (2) 算數(shù)運算符
    (3) 字符串運算符
    (4) 路徑運算符

(1) 三元運算符

<view class="{{is_top?'top-cls':'sub-cls'}}">Hi</view>

(2) 算數(shù)運算

  • 標(biāo)簽內(nèi)支持簡單的加減乘除
<view> {{a+b}}+{{c}}+d</view>
Page({
  data:{
    a:1,
    b:2,
    c:3
   }
})

(3)字符串運算

  • 標(biāo)簽內(nèi)支持對字符串的操作
<view>{{"hello"+name}}</view>

Page({
  data:{
    name:"MIMI"
  }
})

(4) 數(shù)據(jù)路徑運算

  • WXML支持對對象缅刽,數(shù)組啊掏,路徑操作,讀取內(nèi)部的數(shù)據(jù)
<view>{{object.key}}
{{array[0]}}
</view>
--------------------
Page({
      data:{
         object:{
             key:"Hello"
            },
         array:['MiNA']
     }
})

(5)數(shù)據(jù)對象組合---數(shù)組

  • WXML 可以在Mustache內(nèi)進(jìn)行數(shù)組的組合
 <view wx:for="{{[zero,1,2,3,4]}}">{{item}}</view>
------------------
Page({
   data:{
        zero:0
   }
})

(6) wxml 可以在雙括號內(nèi)進(jìn)行對象的組合

 <template is="objectCombine" data="{{for:a,bar:b}}"></template>
-------------------
Page({
          data:{
             a:1,
             b:2
          }
})
------------------
組1代碼組合后傳入的數(shù)據(jù)為{for:1,bar:2}
  • 如果組合時衰猛,出現(xiàn)了相同的變量名迟蜜,后面的變量會覆蓋前面的變量
  • 花括號和引號之間如果有空格,空格最終將被解析為字符串

(四) 列表渲染

  • 了解列表渲染的使用場景
  • 掌握列表渲染的使用方法
  • 學(xué)會wx:key的使用
列表渲染使用說明
  • 列表渲染 : 將一個數(shù)組內(nèi)的所有數(shù)據(jù)依次展示在界面上
  • 常用場景:(1)文章列表 (2)商品列表
  • 列表渲染示例:在組件的wx:for屬性上綁定一個數(shù)組啡省,就可以使用數(shù)組中項目的值來重復(fù)渲染該組件
    示例
  <view wx:for="{{forText}}"wx:key="index">
     <view>{{index}}---{{item}}</view>
  </view>
------------------------
Page({
  data: {
    forText:[1,2,3,4,5,6]
  }
})

默認(rèn)情況下,數(shù)組元素中當(dāng)前項的下標(biāo)變量名為index,當(dāng)前項目值為item,必須要加上wx:key他表示獲取到的序號


  • 在渲染時娜睛,可能會面臨要同時循環(huán)多個元素,那么可以使用輔助標(biāo)簽block來循環(huán)
 <block wx:for="{{forText}}"wx:key="index">
     <view>這個就是序號:{{index}}</view>
     <view>這個就是值:{{item}}</view>
  </block>
------------------------
Page({
  data: {
    forText:[1,2,3,4,5,6]
  }
})
  • 修改循環(huán)變量名

wx:for-index="自定義序號名稱", wx:for-item="自定義序號值"


  <block wx:for="{{forText}}" wx:key="index" wx:for-index="xuhao" wx:for-item="firstzhi">
    <view>這個就是序號:{{xuhao}}</view>
    <view>這個就是值:{{firstzhi}}</view>
  </block>
  • wx:key用法

在未使用wx:key比如數(shù)據(jù)順序發(fā)生了變更卦睹,會改變數(shù)據(jù)的結(jié)構(gòu)畦戒,導(dǎo)致重新渲染。要是使用了wx:key就會在原數(shù)據(jù)的情況下渲染數(shù)據(jù)结序。提升渲染效率障斋。


(五) 條件渲染

  • 了解條件渲染的使用場景
  • 學(xué)習(xí)條件渲染的語法規(guī)則
  • 明確wx:if和hidden的區(qū)別
(1) 條件渲染

在小程序的不同生命周期和不同的用戶操作情況下,可能需要為用戶展示和響應(yīng)不同的內(nèi)容,在這個時候垃环,我們可以借助條件渲染來展示內(nèi)容

  • 控制單個組件的顯示

在組件上加入wx:if來控制組件的顯示和隱藏

<view wx:if="{{condition}}">
123</view>

當(dāng)wx:if對應(yīng)的值為true的時候邀层,對應(yīng)組件會進(jìn)行渲染
當(dāng)wx:if對應(yīng)的值為false的時候,對應(yīng)的組件不會進(jìn)行渲染

  • else 屬性

(1) wx:if 當(dāng)進(jìn)行條件判斷的時候晴裹,使用wx:if來進(jìn)行初始的條件判斷,可單獨出現(xiàn)
(2) wx:else : 如果需要進(jìn)行多種條件判斷結(jié)果使用wx:else 來輔助進(jìn)行結(jié)果判斷
(3) wx:elif : 如果項目不止兩個判斷結(jié)果救赐,使用wx:elif來輔助進(jìn)行結(jié)果的輸出

示例:

 <view wx:if="{{length>5}}">
1
</view>
<view wx:elif="{{length>2}}">
2
</view>
<view wx:else>
3
</view>
  • wx:if 和hidden區(qū)別

  • wx:if 根據(jù)值來判斷組件是否需要渲染進(jìn)入頁面

  • hidden:始終都會進(jìn)行渲染,但是會根據(jù)其值決定是否在頁面中展示
    如果組件的顯示切換頻繁涧团,就用hidden,反之則使用wx:if


(六) 模板使用

  • wxml提供了模板(template),可以在模板中定義代碼片段经磅,然后在不同的頁面調(diào)用
<template name="msgItem">
<view>
  <text>{{index}}:{{msg}}</text>
  <text>Time:{{time}}></text>
</view>
</template>
  • 每個模板都需要一個name屬性泌绣,作為模板的名字
  • template標(biāo)簽內(nèi)部包含的是具體的模板內(nèi)容,標(biāo)簽內(nèi)借助雙大括號來進(jìn)行數(shù)據(jù)綁定
  • 使用模板
<template is="msgitem" data="{{...item}}">
----------
Page({
data:{
   item:{
     index:0,
     msg:"this is a template",
     time:"2016-09-15" 
    }
}
})

備注模板之間傳值可以用{{...xxxx}}這樣能把對象完全展開预厌。

  • wxml引用

wxml提供兩種引用方式: import 和include

(1) import 可以引入目標(biāo)文件中的template,template以外的不會被引入阿迈,在當(dāng)前文件中使用該template,還保持獨立的template
(2) include 則是將目標(biāo)文件中的template代碼進(jìn)行整體引入,相當(dāng)于復(fù)制過來轧叽。沒有了獨立性

舉例

<import src="template.wxml">
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苗沧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炭晒,更是在濱河造成了極大的恐慌待逞,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件网严,死亡現(xiàn)場離奇詭異识樱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)震束,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門怜庸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垢村,你說我怎么就攤上這事割疾。” “怎么了嘉栓?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵杈曲,是天一觀的道長。 經(jīng)常有香客問我胸懈,道長担扑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任趣钱,我火速辦了婚禮涌献,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘首有。我一直安慰自己,他們只是感情好歇由,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布狸涌。 她就那樣靜靜地躺著,像睡著了一般您旁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轴捎,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天鹤盒,我揣著相機(jī)與錄音,去河邊找鬼侦副。 笑死侦锯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秦驯。 我是一名探鬼主播尺碰,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼译隘!你這毒婦竟也來了亲桥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤固耘,失蹤者是張志新(化名)和其女友劉穎两曼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玻驻,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡悼凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了璧瞬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片户辫。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗤锉,靈堂內(nèi)的尸體忽然破棺而出渔欢,到底是詐尸還是另有隱情,我是刑警寧澤瘟忱,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布奥额,位于F島的核電站,受9級特大地震影響访诱,放射性物質(zhì)發(fā)生泄漏垫挨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一触菜、第九天 我趴在偏房一處隱蔽的房頂上張望九榔。 院中可真熱鬧,春花似錦、人聲如沸哲泊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽切威。三九已至育特,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間先朦,已是汗流浹背缰冤。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留烙无,地道東北人锋谐。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓遍尺,卻偏偏與公主長得像截酷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乾戏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容