微信小程序入門:詳解wxml和wxss

上一章我們已經(jīng)介紹了微信小程序的目錄的整體了解以及app系列文件的講解,今天我們具體學(xué)習(xí)下Pages文件夾下的文件與小程序的配置又什么不同:

首先介紹小程序的框架,MINA框架中有四種類型的文件,其中json文件僅僅是小程序的配置:


WXML(WeiXin Markup Language)是框架設(shè)計(jì)的一套標(biāo)簽語言,結(jié)合基礎(chǔ)組件事件系統(tǒng),可以構(gòu)建出頁面的結(jié)構(gòu)。

WXML不同于網(wǎng)頁開發(fā)xml的就是里面的組件,因?yàn)楣倬W(wǎng)已經(jīng)介紹的很清楚了,這里就不介紹了,提供鏈接:https://mp.weixin.qq.com/debug/wxadoc/dev/component/

用以下一些簡單的例子來看看 WXML 具有什么能力: 官方鏈接:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/

1 數(shù)據(jù)綁定:

利用大括號(hào){{ text }}這樣的格式來進(jìn)行信息的綁定,我們只需要在js文件的data屬性中加上 text代表的數(shù)據(jù)。

例如:

在.wxml文件中: {{ name }}

在.js中配置:

data{

name:“Wechat”

}

注意關(guān)鍵字 true和false 必須是這樣使用

特別注意:不要直接寫checked="false",其計(jì)算結(jié)果是一個(gè)字符串,轉(zhuǎn)成 boolean 類型后代表真值。

2 列表渲染 ?:

利用wx:for 實(shí)現(xiàn)對數(shù)組進(jìn)行循環(huán)展示時(shí)候使用,?wx:for-item指定數(shù)組當(dāng)前元素的變量名 ?wx:for-index制定數(shù)組當(dāng)前元素的下標(biāo) 0,1

或者是直接在for循環(huán)的標(biāo)簽內(nèi)部:{{item}} ?{{index}}同上面的功能一樣的 ?例如:

在index.js文件中設(shè)置data數(shù)據(jù) 定義一個(gè)array數(shù)組:


我們在wxml文件中利用wx:for把數(shù)據(jù)實(shí)時(shí)渲染上去:


編譯之后的結(jié)果:


上面我們可以看出{{ item }}和wx:for-item=“myitem”具有相同作用:都是代表array數(shù)組的item ,但是我們可以自定義item名稱,自定義的名稱一目了然。

wx:key當(dāng)數(shù)據(jù)改變并且促發(fā)到了界面的渲染時(shí)候 在小程序進(jìn)行數(shù)據(jù)渲染的時(shí)候會(huì)把去會(huì)校正帶有 key 的組件,框架會(huì)確保他們被重新排序,而不是重新創(chuàng)建,已確保他們保存的狀態(tài)

如果有switch checkbox等需要保存狀態(tài)的組件時(shí) 需要帶有key關(guān)鍵值 用來保存之前的狀態(tài)? 。

3 條件渲染:

wx:if="{{hidden}}" ?判斷里面hidden的值進(jìn)行判斷,一般情況下都是用來判斷是否首先是某個(gè)組件,通過js中的邏輯代碼,動(dòng)態(tài)控制組件是顯示還是隱藏

如果需要一次性判斷多個(gè)條件 ?使用block標(biāo)簽

view1

view2

<\block>

4 模板:模板其實(shí)就是android中的base類 也就是通用 例如每個(gè)界面的頭部相同的話,只需要引用template就可以了。

定義模板

使用name屬性,作為模板的名字。然后在內(nèi)定義代碼片段,如:

{{index}}:?{{msg}}

Time:?{{time}}

使用模板

使用 is 屬性,聲明需要的使用的模板,然后將模板所需要的 data 傳入,如:

Page({? data: {? ? item: {? ? ? index:0,? ? ? msg:'this is a template',? ? ? time:'2016-09-15'}? }})

is 屬性可以使用 Mustache 語法,來動(dòng)態(tài)決定具體需要渲染哪個(gè)模板:

odd

even

注意這個(gè)是在同一個(gè)mxml文件中的template 自我感覺沒有什么意義,一般情況下這個(gè)都是用來設(shè)置header和footer,定義在pages文件夾之外。

在下面的引入中會(huì)有使用外界的template

5 事件: 重點(diǎn)

事件可以用來對視圖層和邏輯層進(jìn)行通信的方式

事件也可以將用戶的行為傳遞到邏輯層做處理 也就我們所說的點(diǎn)擊事件

事件可以綁定在組件上,當(dāng)達(dá)到觸發(fā)事件,就會(huì)執(zhí)行邏輯層中對應(yīng)的事件處理函數(shù)。

事件對象可以攜帶額外信息,如 id, dataset, touches。 頁面跳轉(zhuǎn)時(shí)候都會(huì)發(fā)送信息過去。

點(diǎn)擊事件可以分為2類:

1:冒泡事件: 點(diǎn)擊事件會(huì)向點(diǎn)擊組件的父類進(jìn)行傳遞

2:非冒泡事件:點(diǎn)擊事件不會(huì)向點(diǎn)擊組件的父類傳遞

WXML的冒泡事件列表:

類型觸發(fā)條件

touchstart手指觸摸動(dòng)作開始

touchmove手指觸摸后移動(dòng)

touchcancel手指觸摸動(dòng)作被打斷,如來電提醒,彈窗

touchend手指觸摸動(dòng)作結(jié)束

tap手指觸摸后馬上離開

longtap手指觸摸后,超過350ms再離開

注:除上表之外的其他組件自定義事件如無特殊申明都是非冒泡事件,如submit事件,input事件,scroll事件,(詳見各個(gè)組件)

在事件的綁定有2種綁定方式 1:bind 2:catch ?但是bind事件不會(huì)阻止冒泡事件向上的傳遞。但是catch事件會(huì)阻止冒泡事件向上傳遞

outer?view

middle?view

inner?view


我點(diǎn)擊middle view時(shí)候出現(xiàn):


我點(diǎn)擊inner view


從上面可以說明 catch綁定事件,是不會(huì)向父級目錄傳遞的,但是inner view使用bind綁定就向父級目錄傳遞了。

事件對象:

如無特殊說明,當(dāng)組件觸發(fā)事件時(shí),邏輯層綁定該事件的處理函數(shù)會(huì)收到一個(gè)事件對象。

bind:function(e){

console.log(e)

}


dataset

在組件中可以定義數(shù)據(jù),這些數(shù)據(jù)將會(huì)通過事件傳遞給 SERVICE。 書寫方式: 以data-開頭,多個(gè)單詞由連字符-鏈接,不能有大寫(大寫會(huì)自動(dòng)轉(zhuǎn)成小寫)如data-element-type,最終在 event.target.dataset 中會(huì)將連字符轉(zhuǎn)成駝峰e(cuò)lementType。

在使用過程中很簡單,只需要在wxml中的組件中加入 data-id=“”


這個(gè)時(shí)候在點(diǎn)擊事件的currentTarget /dataset目錄下就有了一個(gè)id的屬性 可以直接使用 e.currentTarget.dataset.id獲取id中的值,其實(shí)也就是傳遞數(shù)據(jù)的一種方式


6 引入

在小程序里面對于框架的引用有著import和include 其實(shí)都是對框架的引用

在import一般和template使用 引入框架 例如:

在下面我們設(shè)置了2個(gè)template模塊,一個(gè)是header 一個(gè)是footer


接下來是我們的引用了:


在引入使用src屬性定義路徑 注意路徑格式: ../../template/template.wxml

這里的第一個(gè)" ?../ ?"回到父級目錄,這里是pages目錄下, 第二個(gè)“../”這里是回到了pages目錄 而我們的template和pages在用同一個(gè)目錄下,

這樣就可以直接進(jìn)入template

利用" is "確定是使用那個(gè)template ?data采用key-value的格式來設(shè)置數(shù)據(jù) 注意key必須和template中的一致 但是野可以直接在data屬性中設(shè)置參數(shù)

上面的例子 header直接使用key-value進(jìn)行賦值,在footer模板中使用data動(dòng)態(tài)渲染賦值

注意template的作用域:

import只能使用引用的目錄中的template ?如果在A import B ?C import A 即使C import A ?在C中也是不能使用B中的template

也就是說import不具備傳遞性

另外一種引入是 include標(biāo)簽 include標(biāo)簽就是將head.wxml中的布局復(fù)制過來 使用方式:

WXSS(WeiXin Style Sheets):是一套樣式語言,用于描述 WXML 的組件樣式。

WXSS 用來決定 WXML 的組件應(yīng)該怎么顯示。

為了適應(yīng)廣大的前端開發(fā)者,我們的 WXSS 具有 CSS 大部分特性。 同時(shí)為了更適合開發(fā)微信小程序,我們對 CSS 進(jìn)行了擴(kuò)充以及修改。

對于初學(xué)者而言 這可以說是最難的,但是熟悉之后確實(shí)最簡單的,因?yàn)橹际枪潭ǎ幌霕I(yè)務(wù)邏輯動(dòng)態(tài)改變。

與 CSS 相比我們擴(kuò)展的特性有:

尺寸單位

樣式導(dǎo)入

尺寸單位:

rpx(responsive pixel): 可以根據(jù)屏幕寬度進(jìn)行自適應(yīng)。規(guī)定屏幕寬為750rpx。如在 iPhone6 上,屏幕寬度為375px,共有750個(gè)物理像素,則750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素

對于android開發(fā)的人而言其實(shí)很簡單 也就是類似dp 設(shè)置的大小不會(huì)根據(jù)屏幕的大小改變而改變,根據(jù)屏幕的像素px來改變大小的,所以比例都是一樣大小的。

內(nèi)聯(lián)樣式

框架組件上支持使用 style、class 屬性來控制組件的樣式。

style:靜態(tài)的樣式統(tǒng)一寫到 class 中。style 接收動(dòng)態(tài)的樣式,在運(yùn)行時(shí)會(huì)進(jìn)行解析,請盡量避免將靜態(tài)的樣式寫進(jìn) style 中,以免影響渲染速度。

class:用于指定樣式規(guī)則,其屬性值是樣式規(guī)則中類選擇器名(樣式類名)的集合,樣式類名不需要帶上.,樣式類名之間用空格分隔。

全局樣式與局部樣式

定義在 app.wxss 中的樣式為全局樣式,作用于每一個(gè)頁面。在 page 的 wxss 文件中定義的樣式為局部樣式,只作用在對應(yīng)的頁面,并會(huì)覆蓋 app.wxss 中相同的選擇器。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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