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