這篇文章主要介紹“微信小程序視圖層的知識點(diǎn)有哪些”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“微信小程序視圖層的知識點(diǎn)有哪些”文章能幫助大家解決問題。
創(chuàng)新互聯(lián)建站憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了成都做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
小程序框架的視圖層由WXML(WeiXin Markup Language,微信標(biāo)記語言)與WXSS(WeiXin Style Sheet,微信樣式表)編寫,由組件來進(jìn)行展示。視圖層負(fù)責(zé)將邏輯層的數(shù)據(jù)顯示在頁面上,同時(shí)將視圖層的事件發(fā)送給邏輯層。WXML用來描述頁面的結(jié)構(gòu),WXSS用于描述頁面的樣式,組件是視圖的基本組成單元。這三者的關(guān)系可以類比為HTML,CSS與HTML里面各種標(biāo)簽的關(guān)系。除了這三者之外,還有一套用于小程序的腳本語言——WXS(WeiXin Script)。WXS和WXML結(jié)合起來,可以構(gòu)建出頁面結(jié)構(gòu)。
數(shù)據(jù)綁定的基本原則:
1)在 data 中定義頁面的數(shù)據(jù):在頁面對應(yīng)的 .js 文件中,把數(shù)據(jù)定義到 data 對象中即可。
Page({ data:{ //字符串類型的數(shù)據(jù) info: 'init data ' , //數(shù)組類型的數(shù)據(jù) msgList: [{msg: 'hello'},{msg: "world '}] } })
2)在 WXML 中使用數(shù)據(jù):把data中的數(shù)據(jù)綁定到頁面中渲染,使用 Mustache 語法(雙大括號)將變量包起來即可。語法格式為:
<view>{{要綁定的數(shù)據(jù)名稱}}</view>
Mustache 語法的主要應(yīng)用場景如下:
①內(nèi)容。直接在頁面上顯示數(shù)據(jù)內(nèi)容。
②組件屬性。用后端變量來設(shè)置前端部分組件的屬性,注意由雙大括號括起來的變量需要在屬性的雙引號內(nèi)。
③控制屬性。用后端變量來控制前端組件的顯示效果,注意由雙大括號括起來的變量需要在屬性的雙引號內(nèi)。
④關(guān)鍵字。主要用于邏輯判斷。
①三元運(yùn)算。可以在雙大括號內(nèi)進(jìn)行三元運(yùn)算。
.js中:
Page({ data: { randomNum:Math.random()*10 } })
.wxml中:
<view>{{randomNum>=5?'數(shù)字大于等于5':'數(shù)字小于5'}}</view>
②算術(shù)運(yùn)算。在雙大括號內(nèi),可以進(jìn)行基本的算術(shù)運(yùn)算,會直接顯示運(yùn)算后的結(jié)果。
③邏輯判斷。在雙大括號內(nèi),可以進(jìn)行邏輯運(yùn)算,返回boolean類型的true或false,可以用于某些屬性的控制。
④字符串運(yùn)算。在雙大括號內(nèi),可以做字符串的拼接運(yùn)算。
⑤數(shù)據(jù)路徑運(yùn)算。對于數(shù)組和JSON對象類型的數(shù)據(jù),在雙大括號內(nèi)可以通過索引的方式取其值。
①數(shù)組
②對象
通過 wx:for 可以根據(jù)指定的數(shù)組,循環(huán)渲染重復(fù)的組件結(jié)構(gòu),語法示例如下:
.js中:
Page({ data: { array:['a','b','c'] } })
.wxml中:
<view wx:for="{{array}}"> 索引是:{{index}},當(dāng)前項(xiàng)是:{{item}} </view>
默認(rèn)情況下,當(dāng)前循環(huán)項(xiàng)的索引用 index 表示;當(dāng)前循環(huán)項(xiàng)用 item 表示。
使用 wx:for-index 可以指定當(dāng)前循環(huán)項(xiàng)的索引的變量名
使用 wx:for-item 可以指定當(dāng)前項(xiàng)的變量名
.wxml中:
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName"> 索引是:{{idx}},當(dāng)前項(xiàng)是:{{itemName}} </view>
類似于 Vue 列表渲染中的 :key,小程序在實(shí)現(xiàn)列表渲染時(shí),也建議為渲染出來的列表項(xiàng)指定唯一的 key 值,從而提高渲染的效率,示例代碼如下:
.js中:
Page({ data: { userList:[ {id:1,name:'冠軍'}, {id:2,name:'亞軍'}, {id:3,name:'季軍'} ] } })
.wxml中:
<view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>
wx:key的值以如下兩種形式提供:
1)字符串。代表在wx:for循環(huán)的數(shù)組中某一項(xiàng)的某個(gè)屬性,該屬性的值需要是列表中唯一的字符串或者數(shù)字,且不能動(dòng)態(tài)改變。
2)保留關(guān)鍵字*this。代表在wx:for循環(huán)中的某一項(xiàng)本身,這種表示需要這一項(xiàng)本身是一個(gè)唯一的字符串或者數(shù)字。
在小程序中,使用 wx:if="{{condition}}" 來判斷是否需要渲染該代碼塊,也可以用 wx:elif 和 wx:else 來添加 else 判斷。示例如下:
.js中:
Page({ data: { type:1 } })
.wxml中:
<view wx:if="{{type === 1}}">男</view> <view wx:elif="{{type === 2}}">女</view> <view wx:else>保密</view>
<block>
使用 wx:if如果要一次性控制多個(gè)組件的展示與隱藏,可以使用一個(gè) <block ></block >
標(biāo)簽將多個(gè)組件包裝起來,并在<block>
標(biāo)簽上使用 wx:if 控制屬性,示例如下:
<block wx:if="{{true}}"> <view>view1</view> <view>view2</view> </block>
注意: <block>
并不是一個(gè)組件,它只是一個(gè)包裹性質(zhì)的容器,不會在頁面中做任何渲染。
在小程序中,直接使用 hidden="{{ condition }}" 也能控制元素的顯示與隱藏:
<view hidden="{{flag}}">true隱藏,false顯示</view>
1)運(yùn)行方式不同:
wx:if 以動(dòng)態(tài)創(chuàng)建和移除元素的方式,控制元素的展示與隱藏。
hidden 以切換樣式的方式(display: none/block;),控制元素的顯示與隱藏。
2)使用建議:
頻繁切換時(shí),建議使用 hidden。
控制條件復(fù)雜時(shí),建議使用 wx:if 搭配 wx:elif、wx:else 進(jìn)行展示與隱藏的切換。
事件是視圖層到邏輯層的通信方式,它可以將用戶的行為反饋到邏輯層講行處理。事件一般綁定在組件上,當(dāng)設(shè)定監(jiān)聽的事件被觸發(fā)時(shí),視圖層會將攜帶了id、dataset、touches等信息的事件對象發(fā)送到邏輯層中,此時(shí)框架就會執(zhí)行邏輯層中
對應(yīng)的事件處理函數(shù),來響應(yīng)用戶的操作。
事件分為冒泡事件和非冒泡事件。
冒泡事件:當(dāng)一個(gè)組件上的事件被觸發(fā)后,該事件會向父節(jié)點(diǎn)傳遞。
非冒泡事件:當(dāng)一個(gè)組件上的事件被觸發(fā)后,該事件不會向父節(jié)點(diǎn)傳遞。
.wxml中:
<button type="primary" bindtap="btnTapHandler">按鈕</button>
.js中定義事件處理函數(shù):
Page({ // 定義按鈕的事件處理函數(shù) btnTapHandler(event){ console.log(event) } })
當(dāng)組件觸發(fā)事件時(shí)。邏輯層綁定該事件的處理函數(shù)會收到一個(gè)事件對象。
通過調(diào)用 this.setData(dataObject) 方法,可以給頁面 data 中的數(shù)據(jù)重新賦值。示例如下:
.wxml中:
<button type="primary" bindtap="countChange">+1</button>
.js中定義事件處理函數(shù):
Page({ data: { count:0 }, //+1 按鈕的事件處理函數(shù) countChange(){ this.setData({ count:this.data.count +1 }) } })
小程序中的事件傳參比較特殊,不能在綁定事件的同時(shí)為事件處理函數(shù)傳遞參數(shù)。可以為組件提供 data-* 自定義屬性傳參,其中 * 代表的是參數(shù)的名字,示例代碼如下:
.wxml中:( info 會被解析為參數(shù)的名字,數(shù)值 2 會被解析為參數(shù)的值。)
<button type="primary" bindtap="binTap2" data-info="{{2}}">+2</button>
.js中:(在事件處理函數(shù)中,通過 event.target.dataset.參數(shù)名即可獲取到具體參數(shù)的值)
Page({ data: { count:0 }, //+2 binTap2(event){ this.setData({ count:this.data.count + event.target.dataset.info }) } })
在小程序中,通過 input 事件來響應(yīng)文本框的輸入事件。
.wxml中:
<input bindinput="inputHandler"></input>
.js 中定義事件處理函數(shù):
Page({ //input輸入框的事件處理函數(shù) inputHandler(event){ console.log(event.detail.value) } })
實(shí)現(xiàn)步驟:①定義數(shù)據(jù);②渲染結(jié)構(gòu);③美化樣式;④綁定 input 事件處理函數(shù)。
WXML提供兩種文件引用方式:import 和 include
1)import 可以在該文件中使用目標(biāo)文件定義的模板。import 有作用域的概念,即只會導(dǎo)入目標(biāo)文件中定義的模板,而不會導(dǎo)入目標(biāo)文件導(dǎo)入的模板。
2)include 可以將目標(biāo)文件除了<template/><wxs/>
外的整個(gè)代碼引入,相當(dāng)于復(fù)制到 include 位置。
WXSS (WeiXin Style Sheets)是一套樣式語言,用于美化 WXML 的組件樣式,類似于網(wǎng)頁開發(fā)中的 CSS。WXSS 具有 CSS 大部分特性,同時(shí),WXSS 還對 CSS 進(jìn)行了擴(kuò)充以及修改,以適應(yīng)微信小程序的開發(fā)。
與 CSS 相比,WXSS 擴(kuò)展的特性有:
rpx 尺寸單位
@import 樣式導(dǎo)入
rpx(responsive pixel)是微信小程序獨(dú)有的,用來解決屏適配的尺寸單位。
rpx 的實(shí)現(xiàn)原理非常簡單:鑒于不同設(shè)備屏幕的大小不同,為了實(shí)現(xiàn)屏幕的自動(dòng)適配,rpx 把所有設(shè)備的屏幕,在寬度上等分為 750 份(即:當(dāng)前屏幕的總寬度為 750rpx)。
在較小的設(shè)備上,1rpx 所代表的寬度較小
在較大的設(shè)備上,1rpx 所代表的寬度較大
小程序在不同設(shè)備上運(yùn)行的時(shí)候,會自動(dòng)把 rpx 的樣式單位換算成對應(yīng)的像素單位來渲染,從而實(shí)現(xiàn)屏幕適配。
在 iPhone6 上,屏幕寬度為375px,共有 750 個(gè)物理像素,等分為 750rpx。則:
750rpx = 375px = 750 物理像素
1rpx = 0.5px = 1物理像素
官方建議:開發(fā)微信小程序時(shí),設(shè)計(jì)師可以用 iPhone6 作為視覺稿的標(biāo)準(zhǔn)。
使用 WXSS 提供的 @import 語法,可以導(dǎo)入外聯(lián)的樣式表。
@import 后跟需要導(dǎo)入的外聯(lián)樣式表的相對路徑,用 ;
表示語句結(jié)束。
內(nèi)聯(lián)樣式是框架組件上支持使用 style、class 屬性來控制組件的樣式。
1)style:用于接收動(dòng)態(tài)樣式,在運(yùn)行時(shí)會進(jìn)行解析。
2)class:用于指定樣式規(guī)則。其值是樣式規(guī)則中類選擇器名(樣式類名)的集合。一般將靜態(tài)樣式寫到對應(yīng)樣式類名的定義中。多個(gè)樣式類名之間用空格分隔。
和CSS一樣,WXSS也需要使用選擇器來決定樣式的作用對象。
1)全局樣式:定義在 app.wxss 中的樣式為全局樣式,作用于每一個(gè)頁面。
2)局部樣式:在頁面的 .wxss 文件中定義的樣式為局部樣式,只作用于當(dāng)前頁面。
注意:
當(dāng)局部樣式和全局樣式?jīng)_突時(shí),根據(jù)就近原則,局部樣式會覆蓋全局樣式。
當(dāng)局部樣式的權(quán)重大于或等于全局樣式的權(quán)重時(shí),才會覆蓋全局的樣式。
WXS(WeiXin Script)是小程序獨(dú)有的一套腳本語言,結(jié)合 WXML,可以構(gòu)建出頁面的結(jié)構(gòu)。
wxml 中無法調(diào)用在頁面的 .js 中定義的函數(shù),但是,wxml 中可以調(diào)用 wxs 中定義的函數(shù)。因此,小程序中 wxs 的典型應(yīng)用場景就是“過濾器”。
雖然 wxs 的語法類似于 JavaScript,但是 wxs 和 JavaScript 是完全不同的兩種語言:
(1)wxs 有自己的數(shù)據(jù)類型:
number 數(shù)值類型
string 字符串類型
boolean 布爾類型
object 對象類型
function函數(shù)類型
array 數(shù)組類型
date 日期類型
regexp 正則
(2)wxs 不支持類似于 ES6 及以上的語法形式
不支持:let、const、解構(gòu)賦值、展開運(yùn)算符、箭頭函數(shù)、對象屬性簡寫、etc…
支持:var 定義變量、普通 function函數(shù)等類似于 ES5 的語法
(3)wxs 遵循 CommonJS 規(guī)范
module 對象
require() 函數(shù)
module.exports 對象
wxs 代碼可以編寫在 wxml 文件中的 <wxs>
標(biāo)簽內(nèi),就像 Javascript 代碼可以編寫在 html 文件中的 <script>
標(biāo)簽內(nèi)一樣。
wxml 文件中的每個(gè) <wxs></wxs>
標(biāo)簽,必須提供 module 屬性,用來指定當(dāng)前 wxs 的模塊名稱,方便在 wxml 中訪問模塊中的成員。
.wxml中:
<view>{{m1.toUpper(username)}}</view> <wxs module="m1"> //將文本轉(zhuǎn)為大寫形式zs -> ZS module.exports.toUpper = function(str) { return str.toUpperCase() } </wxs>
wxs 代碼還可以編寫在以 .wxs 為后綴名的文件內(nèi),就像 javascript 代碼可以編寫在以 .js 為后綴名的文件中一樣。示例代碼如下:
//tools.wxs文件 function toLower(str) { return str.toLowerCase() } module.exports = { toLower: toLower }
在 wxml 中引入外聯(lián)的 wxs 腳本時(shí),必須為 標(biāo)簽添加 module 和 src 屬性,其中:
module 用來指定模塊的名稱
src 用來指定要引入的腳本的路徑,且必須是相對路徑
示例代碼如下:
<!--調(diào)用m2模塊中的方法--> <viewr>{{m2.toLower(country)}}</view> <!--引用外聯(lián)的tools.wxs腳本,并命名為 m2--> <wxs src=" ../../utils/tools.wxs " module="m2"></wxs>
(1)與 JavaScript 不同
為了降低 wxs(WeiXin Script)的學(xué)習(xí)成本, wxs 語言在設(shè)計(jì)時(shí)借大量鑒了 JavaScript 的語法。但是本質(zhì)上,wxs 和 JavaScript 是完全不同的兩種語言!
(2)不能作為組件的事件回調(diào)
wxs 典型的應(yīng)用場景就是“過濾器”,經(jīng)常配合 Mustache 語法進(jìn)行使用。但是,在 wxs 中定義的函數(shù)不能作為組件的事件回調(diào)函數(shù)。
(3)隔離性
隔離性指的是 wxs 的運(yùn)行環(huán)境和其他 JavaScript 代碼是隔離的。體現(xiàn)在如下兩方面:
①wxs 不能調(diào)用 js 中定義的函數(shù)
②wxs 不能調(diào)用小程序提供的 API
(4)性能好
①在 iOS 設(shè)備上,小程序內(nèi)的 WXS 會比 JavaScript 代碼快 2 ~ 20 倍
②在 android 設(shè)備上,二者的運(yùn)行效率無差異
關(guān)于“微信小程序視圖層的知識點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。
文章題目:微信小程序視圖層的知識點(diǎn)有哪些
鏈接地址:http://jinyejixie.com/article14/pocode.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)