微信小程序(一)WXML模板

WXML模板

本節(jié)學習目標

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

(一)wxml是什么

wxml 是微信小程序團隊設計的一套標簽語言,可以構造出頁面的結構,類似html
借助wxml提供的組件我們可以實現文字的嵌入,圖片的嵌入,視頻的嵌入,各種能力的嵌入等等

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

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

(三)wxml數據綁定

  • 了解數據綁定的使用場景
  • 掌握基本的數據綁定用法

數據綁定(雙向綁定)

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


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

(1)數據綁定之內容綁定

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

(2)組件屬性綁定

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

(3) 邏輯語法

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

(1) 三元運算符

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

(2) 算數運算

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

(3)字符串運算

  • 標簽內支持對字符串的操作
<view>{{"hello"+name}}</view>

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

(4) 數據路徑運算

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

(5)數據對象組合---數組

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

(6) wxml 可以在雙括號內進行對象的組合

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

(四) 列表渲染

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

默認情況下,數組元素中當前項的下標變量名為index,當前項目值為item,必須要加上wx:key他表示獲取到的序號


  • 在渲染時,可能會面臨要同時循環(huán)多個元素,那么可以使用輔助標簽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比如數據順序發(fā)生了變更,會改變數據的結構,導致重新渲染。要是使用了wx:key就會在原數據的情況下渲染數據。提升渲染效率。


(五) 條件渲染

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

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

  • 控制單個組件的顯示

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

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

當wx:if對應的值為true的時候,對應組件會進行渲染
當wx:if對應的值為false的時候,對應的組件不會進行渲染

  • else 屬性

(1) wx:if 當進行條件判斷的時候,使用wx:if來進行初始的條件判斷,可單獨出現
(2) wx:else : 如果需要進行多種條件判斷結果使用wx:else 來輔助進行結果判斷
(3) wx:elif : 如果項目不止兩個判斷結果,使用wx:elif來輔助進行結果的輸出

示例:

 <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 根據值來判斷組件是否需要渲染進入頁面

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


(六) 模板使用

  • wxml提供了模板(template),可以在模板中定義代碼片段,然后在不同的頁面調用
<template name="msgItem">
<view>
  <text>{{index}}:{{msg}}</text>
  <text>Time:{{time}}></text>
</view>
</template>
  • 每個模板都需要一個name屬性,作為模板的名字
  • template標簽內部包含的是具體的模板內容,標簽內借助雙大括號來進行數據綁定
  • 使用模板
<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 可以引入目標文件中的template,template以外的不會被引入,在當前文件中使用該template,還保持獨立的template
(2) include 則是將目標文件中的template代碼進行整體引入,相當于復制過來。沒有了獨立性

舉例

<import src="template.wxml">
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容