天天看點

wxml如何注釋_微信小程式-個人總結

簡介

小程式的運作環境分成渲染層和邏輯層,其中 WXML 模闆和 WXSS 樣式工作在渲染層,JS 腳本工作在邏輯層。這樣在小程式中不能使用一些前端的架構,如jQuery、Zepto等。而網頁開發者可以使用到各種浏覽器暴露出來的 DOM API,進行DOM選中和操作。

wxml如何注釋_微信小程式-個人總結

全局配置

小程式根目錄下的 app.json 檔案用來對微信小程式進行全局配置,決定頁面檔案的路徑、視窗表現、設定網絡逾時時間、設定多 tab 等。

常用的配置項

屬性

類型

描述

pages

string[]

頁面路徑清單

window

Object

全局的預設視窗表現

tabBar

Object

底部 tab 欄的表現

networkTimeout

Object

網絡逾時時間

debug

boolean

是否開啟 debug 模式,預設關閉

部分常用配置選項

{

"pages": [ // 第一項為預設首頁

"pages/index/index",

"pages/logs/index"

],

"window": {

"navigationBarBackgroundColor": "#ffffff", //導航欄背景顔色

"navigationBarTextStyle": "black",//導航欄标題顔色

"navigationBarTitleText": "微信", //導航欄标題文字内容

"backgroundColor": "#eeeeee", //視窗的背景色

"backgroundTextStyle": "light" //下拉 loading 的樣式,僅支援 dark / light

},

"tabBar": {

"color": "#666",//未選中的的文字顔色

"selectedColor": "#ff8928",//選中的的文字顔色

"list": [{

"pagePath": "pages/index/index", //頁面路徑

"text": "首頁",//tab 上按鈕文字

"iconPath": "images/tabBar_img2.png", //未選中的圖檔路徑

"selectedIconPath": "images/tabBar_img1.png"//選中時的圖檔路徑

}, {

"pagePath": "pages/logs/logs",

"text": "日志"

}]

},

"networkTimeout": {

"request": 10000, //wx.request 的逾時時間

"downloadFile": 10000 //wx.downloadFile 的逾時時間

},

"debug": true,

"navigateToMiniProgramAppIdList": [ //允許跳轉到其他小程式的appId

"wxe5f52902cf4de896"

]

}

複制代碼

頁面配置

每一個小程式頁面也可以使用同名 .json 檔案來對本頁面的視窗表現進行配置,頁面中配置項會覆寫 app.json 的 window 中相同的配置項。

{

"navigationBarBackgroundColor": "#ffffff",

"navigationBarTextStyle": "black",

"navigationBarTitleText": "微信接口功能示範",

"backgroundColor": "#eeeeee",

"backgroundTextStyle": "light"

}

複制代碼

sitemap 配置

小程式根目錄下的 sitemap.json 檔案用來配置小程式及其頁面是否允許被微信索引。

注冊小程式

整個小程式隻有一個 App 執行個體,是全部頁面共享的。開發者可以通過 getApp 方法擷取到全局唯一的 App 示例,擷取App上的資料或調用開發者注冊在 App 上的函數。

App({

onLaunch (options) { //生命周期回調——監聽小程式初始化

// Do something initial when launch.

},

onShow (options) { //生命周期回調——監聽小程式啟動或切前台

// Do something when show.

},

onHide () { //生命周期回調——監聽小程式切背景

// Do something when hide.

},

onError (msg) { //錯誤監聽函數

console.log(msg)

},

onPageNotFound(res){ //頁面不存在監聽函數

// Do something when page not found.

},

globalData: 'I am global data'

})

複制代碼其他頁面引用:

const appInstance = getApp()

console.log(appInstance.globalData) // I am global data

複制代碼

頁面生命周期

Page({

data: { //頁面的初始資料

text: "This is page data."

},

onLoad: function(options) { //生命周期回調—監聽頁面加載

// Do some initialize when page load.

},

onReady: function() { //生命周期回調—監聽頁面初次渲染完成

// Do something when page ready.

},

onShow: function() { //生命周期回調—監聽頁面顯示

// Do something when page show.

},

onHide: function() { //生命周期回調—監聽頁面隐藏

// Do something when page hide.

},

onUnload: function() { //生命周期回調—監聽頁面解除安裝

// Do something when page close.

},

onPullDownRefresh: function() { //監聽使用者下拉動作

// Do something when pull down.

},

onReachBottom: function() { //頁面上拉觸底事件的處理函數

// Do something when page reach bottom.

},

onShareAppMessage: function (res) { //使用者點選右上角轉發

if (res.from === 'button') {

// 來自頁面内轉發按鈕

console.log(res.target)

}

return {

title: '自定義轉發标題',

path: '/page/user?id=123'

}

},

onPageScroll: function() { // 頁面滾動觸發事件的處理函數

// Do something when page scroll

},

onResize: function() { //頁面尺寸改變時觸發,詳見 響應顯示區域變化

// Do something when page resize

},

onTabItemTap(item) { //點選 tab 時觸發

console.log(item.index); //被點選tabItem的序号,從0開始

console.log(item.pagePath); //被點選tabItem的頁面路徑

console.log(item.text); //被點選tabItem的按鈕文字

}

})

複制代碼

頁面路由

架構以棧的形式維護了目前的所有頁面

打開新頁面

調用 API wx.navigateTo

使用元件

複制代碼

頁面重定向

調用 API wx.redirectTo

使用元件

複制代碼

頁面傳回

調用 API wx.navigateBack

使用元件

使用者按左上角傳回按鈕

複制代碼

Tab 切換

調用 API wx.switchTab

使用元件

使用者切換 Tab

複制代碼

重新開機動

調用 API wx.reLaunch

使用元件

複制代碼

子產品化

可以将一些公共的代碼抽離成為一個單獨的 js 檔案,作為一個子產品。子產品隻有通過 module.exports 或者 exports 才能對外暴露接口。

// common.js

function sayHello(name) {

console.log(`Hello ${name} !`)

}

function sayGoodbye(name) {

console.log(`Goodbye ${name} !`)

}

module.exports.sayHello = sayHello

exports.sayGoodbye = sayGoodbye

//引入并調用

var common = require('common.js')

Page({

helloMINA: function() {

common.sayHello('MINA')

},

goodbyeMINA: function() {

common.sayGoodbye('MINA')

}

})

複制代碼

常用API

名稱

說明

wx.showToast

顯示消息提示框

wx.showLoading

顯示 loading 提示框

wx.request

發起 HTTPS 網絡請求

wx.uploadFile

将本地資源上傳到伺服器

wx.showShareMenu

顯示目前頁面的轉發按鈕

wx.login

調用接口擷取登入憑證(code)

wx.checkSession

檢查登入态是否過期

wx.getAccountInfoSync

擷取目前帳号資訊

wx.getUserInfo

擷取使用者資訊

wx.UserInfo

使用者資訊

wx.authorize

提前向使用者發起授權請求

wx.setClipboardData

設定系統剪貼闆的内容

wx.getClipboardData

擷取系統剪貼闆的内容

WXML

WXML(WeiXin Markup Language)是架構設計的一套标簽語言,結合基礎元件、事件系統,可以建構出頁面的結構。

資料綁定

WXML 中的動态資料均來自對應 Page 的 data,使用雙大括号将變量包起來。

{{message}}

// page.js

Page({

data: {

message: 'Hello MINA!'

}

})

複制代碼

清單渲染

在元件上使用 wx:for 控制屬性綁定一個數組,即可使用數組中各項的資料重複渲染該元件。

預設數組的目前項的下标變量名預設為 index,數組目前項的變量名預設為 item。

{{item}}

// page.js

Page({

data: {

array: [1, 2, 3, 4, 5]

}

})

複制代碼

條件渲染

在架構中,使用 wx:if="" 來判斷是否需要渲染該代碼塊。

預設數組的目前項的下标變量名預設為 index,數組目前項的變量名預設為 item。

WEBVIEW

APP

MINA

// page.js

Page({

data: {

view: 'MINA'

}

})

複制代碼wx:if vs hidden

因為 wx:if 之中的模闆也可能包含資料綁定,是以當 wx:if的條件值切換時,架構有一個局部渲染的過程,因為它會確定條件塊在切換時銷毀或重新渲染。

同時 wx:if 也是惰性的,如果在初始渲染條件為false,架構什麼也不做,在條件第一次變成真的時候才開始局部渲染。

相比之下,hidden 就簡單的多,元件始終會被渲染,隻是簡單的控制顯示與隐藏。

一般來說,wx:if 有更高的切換消耗而 hidden。有更高的初始渲染消耗。

是以,如果需要頻繁切換的情景下,用 hidden 更好,如果在運作時條件不大可能改變則 wx:if 較好。

模闆

WXML提供模闆(template),可以在模闆中定義代碼片段,然後在不同的地方調用。

FirstName: {{firstName}}, LastName: {{lastName}}

// page.js

Page({

data: {

staffA: {firstName: 'Hulk', lastName: 'Hu'},

}

})

複制代碼

引用

WXML 提供兩種檔案引用方式import和include。

import

import可以在該檔案中使用目标檔案定義的template

{{text}}

//引用

複制代碼include

include 可以将目标檔案除了template,wxs外的整個代碼引入,相當于是拷貝到 include 位置。

header

footer

body

複制代碼

WXSS

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

與 CSS 相比,WXSS 擴充的特性有:

尺寸機關

樣式導入

尺寸機關

rpx(responsive pixel): 可以根據螢幕寬度進行自适應。規定螢幕寬為750rpx。如在 iPhone6 上,螢幕寬度為375px,共有750個實體像素,則750rpx = 375px = 750實體像素,1rpx = 0.5px = 1實體像素。

wxml如何注釋_微信小程式-個人總結

樣式導入

.small-p {

padding:5px;

}

@import "common.wxss";

.middle-p {

padding:15px;

}

複制代碼

内聯樣式

複制代碼

選擇器

wxml如何注釋_微信小程式-個人總結

WXS

WXS(WeiXin Script)是小程式的一套腳本語言,結合 WXML,可以建構出頁面的結構。

子產品

方式一:wxs标簽

var foo = "'hello world' from tools.wxs";

var bar = function (d) {

return d;

}

module.exports = {

FOO: foo,

bar: bar,

};

module.exports.msg = "some msg";

{{tools.msg}}

{{tools.bar(tools.FOO)}}

some msg

'hello world' from tools.wxs

複制代碼方式二:require函數

var foo = "'hello world' from tools.wxs";

var bar = function (d) {

return d;

}

module.exports = {

FOO: foo,

bar: bar,

};

module.exports.msg = "some msg";

var tools = require("./tools.wxs");

console.log(tools.FOO);

console.log(tools.bar("logic.wxs"));

console.log(tools.msg);

'hello world' from tools.wxs

logic.wxs

some msg

複制代碼

變量

WXS 中的變量均為值的引用。

沒有聲明的變量直接指派使用,會被定義為全局變量。

如果隻聲明變量而不指派,則預設值為 undefined。

var表現與javascript一緻,會有變量提升。

var foo = 1;

var bar = "hello world";

var i; // i === undefined

變量命名必須符合下面兩個規則:

首字元必須是:字母(a-zA-Z),下劃線(_)

剩餘字元可以是:字母(a-zA-Z),下劃線(_), 數字(0-9)

複制代碼

注釋

// 方法一:單行注釋

/*

方法三:結尾注釋。即從 /* 開始往後的所有 WXS 代碼均被注釋

var a = 1;

var b = 2;

var c = "fake";

複制代碼

事件

事件是視圖層到邏輯層的通訊方式。

事件可以将使用者的行為回報到邏輯層進行處理。

事件可以綁定在元件上,當達到觸發事件,就會執行邏輯層中對應的事件處理函數。

事件對象可以攜帶額外資訊,如 id, dataset, touches

事件清單

類型

觸發條件

touchstart

手指觸摸動作開始

touchmove

手指觸摸後移動

touchcancel

手指觸摸動作被打斷,如來電提醒,彈窗

touchend

手指觸摸動作結束

tap

手指觸摸後馬上離開

longpress

手指觸摸後,超過350ms再離開,如果指定了事件回調函數并觸發了這個事件,tap事件将不被觸發

longtap

手指觸摸後,超過350ms再離開(推薦使用longpress事件代替)

transitionend

會在 WXSS transition 或 wx.createAnimation 動畫結束後觸發

animationstart

會在一個 WXSS animation 動畫開始時觸發

animationiteration

會在一個 WXSS animation 一次疊代結束時觸發

animationend

會在一個 WXSS animation 動畫完成時觸發

touchforcechange

在支援 3D Touch 的 iPhone 裝置,重按時會觸發

submit

送出表單

scroll

滾動事件

事件綁定的寫法以 key、value 的形式,key以bind或catch開頭,然後跟上事件的類型,如bindtap、catchtouchstart。

bind事件綁定不會阻止冒泡事件向上冒泡

catch事件綁定可以阻止冒泡事件向上冒泡

元件

視圖容器

名稱

功能說明

movable-view

可移動的視圖容器,在頁面中可以拖拽滑動

cover-image

覆寫在原生元件之上的圖檔視圖

cover-view

覆寫在原生元件之上的文本視圖

movable-area

movable-view的可移動區域

scroll-view

可滾動視圖區域

swiper

滑塊視圖容器

swiper-item

僅可放置在swiper元件中,寬高自動設定為100%

view

視圖容器

基礎内容

名稱

功能說明

icon

圖示

progress

進度條

rich-text

富文本

text

文本

表單元件

名稱

功能說明

button

按鈕

checkbox

多選項目

checkbox-group

多項選擇器,内部由多個checkbox組成

editor

富文本編輯器,可以對圖檔、文字進行編輯

form

表單

input

輸入框

label

用來改進表單元件的可用性

picker

從底部彈起的滾動選擇器

picker-view

嵌入頁面的滾動選擇器

picker-view-column

滾動選擇器子項

radio

單選項目

radio-group

單項選擇器,内部由多個 radio 組成

slider

滑動選擇器

switch

開關選擇器

textarea

多行輸入框

導航

名稱

功能說明

functional-page-navigator

僅在插件中有效,用于跳轉到插件功能頁

navigator

頁面連結

媒體元件

名稱

功能說明

audio

音頻

camera

系統相機

image

圖檔

live-player

實時音視訊播放

live-pusher

實時音視訊錄制

video

視訊

地圖

名稱

功能說明

map

地圖

畫布

名稱

功能說明

canvas

畫布

開放能力

名稱

功能說明

web-view

承載網頁的容器

ad

Banner 廣告

official-account

公衆号關注元件

open-data

用于展示微信開放的資料

個人總結

引入子產品-示例代碼

// common.js

function sayHello(name) {

console.log(`Hello ${name} !`)

}

function sayGoodbye(name) {

console.log(`Goodbye ${name} !`)

}

module.exports.sayHello = sayHello;

//引用

exports.sayGoodbye = sayGoodbye

var common = require('common.js')

Page({

helloMINA: function() {

common.sayHello('MINA')

},

goodbyeMINA: function() {

common.sayGoodbye('MINA')

}

})

複制代碼跳轉

wx.navigateTo({ //跳轉-保留目前頁面,跳轉到應用内的某個頁面

url: 'test?id=1'

})

wx.redirectTo({ //跳轉-關閉目前頁面

url: 'test?id=1'

})

複制代碼擷取全局資料

var app=getApp()

複制代碼樣式判斷

複制代碼

結語

如果文章中有誤的,可以留言告知。希望這篇文章對你有幫助!一起成長!一起進步!

此篇僅個人總結微信小程式,如果想檢視更多的詳情可以前往 微信小程式官網