微信小程序基礎(chǔ)語法總結(jié)

配置文件

app.json的配置(全局)

{

// 用來配置頁面的路徑

"pages":[

"pages/index/index", // 首頁

"pages/Test/Test" // 跳轉(zhuǎn)的頁面

],

"window":{

"enablePullDownRefresh": true, // 是否支持下拉刷新

"backgroundTextStyle":"dark", // 下拉刷新的字體顏色,支持light

"backgroundColor": "#e04c4c", // 設置下拉刷新的背景顏色

"navigationBarBackgroundColor": "#fff", // 設置微信程序頂部導航欄顏色

"navigationBarTitleText": "yejiawei", // 頂部導航欄文字

"navigationBarTextStyle":"black" // 頂部導航欄文字樣式,black或者white

"onReachBottomDistance": 50 // 設置上拉事件觸發(fā)時距離底部的位置

},

"tabBar": { // 設置tab切換欄的配置

"list": [

{

"pagePath": "pages/index/index", // 跳轉(zhuǎn)的路徑

"text": "首頁", // tab的文字

"iconPath": "/images/t1.jpg" // 設置背景圖路徑

},

{

"pagePath": "pages/Test/Test",

"text": "測試",

"selectedIconPath": "/images/t1.jpg" // 設置選中時圖片的路徑

}

],

"color": "#e04c4c", // 設置tab按鈕字體顏色

"selectedColor": "#000", // 設置按鈕選中的顏色

"backgroundColor": "#1aad16", // 設置tab按鈕的背景顏色

"borderStyle": "black", // 設置tabbar邊框顏色,只支持black/white

"position": "top" // 設置tabbar的位置,設置為top無法顯示圖片

},

"networkTimeout": {

"request": 10000, // request請求的超時時間

"connectSocket": 10000, // connectSocket的超時時間

"downloadFile": 10000, // 下載文件的超時時間

"uploadFile": 1000 // 上傳文件的超時時間

},

"debug": true // 開啟debug模式,在控制臺輸出程序信息

}

page.json的配置(頁面)

設置的配置用來覆蓋app.json中的window配置

{

"navigationBarBackgroundColor": "#ffffff", // 設置微信程序頂部導航欄顏色

"navigationBarTextStyle": "black", // 頂部導航欄文字樣式,black或者white

"navigationBarTitleText": "微信接口功能演示", // 頂部導航欄文字

"backgroundColor": "#eeeeee", // 設置下拉刷新的背景顏色

"backgroundTextStyle": "light", // 下拉刷新的字體顏色,支持light

"enablePullDownRefresh": true, // 是否支持下拉刷新

"disableScroll": true, // 是否支持滾動

"onReachBottomDistance": 50 // 設置上拉事件觸發(fā)時距離底部的位置

}

程序入口函數(shù)(App)

App({

onLaunch: function (options) {

// 程序加載調(diào)用

},

onShow: function (options) {

// 從后臺進入前臺調(diào)用,默認程序第一次加載回調(diào)用

},

onHide: function () {

// 從前臺切換到后臺調(diào)用

},

onError: function (msg) {

// 程序報錯調(diào)用

},

myFunc: function() {

// 自定義函數(shù)

},

globalData: {

// 全局自定義數(shù)據(jù)

userInfo: "yejiawei"

}

})

上面的onLaunch和onShow方法都有options參數(shù),options參數(shù)里面有如下屬性

{

path: "pages/index/index" // 程序打開的路徑

query: {}, // 當調(diào)用wx.navigateTo可以傳遞query

scene: 1001, // 打開小程序的場景值

referrerInfo: { // 從其他程序中進入到此程序,會返回此字段

appId: ..., // 其他程序的appId

extraData: ... // 其他程序傳遞過來的數(shù)據(jù)

}

}

可以使用 var app = getApp(); 來獲取小程序?qū)嵗琧onsole.log(app.globalData.userInfo)

頁面的入口函數(shù)(Page)

Page({

data: {

msg: "haha" // 頁面的狀態(tài)

},

onLoad: function(options) { // 頁面加載完畢觸發(fā) },

onReady: function() { // 頁面渲染完畢觸發(fā) },

onShow: function() { // 頁面開始渲染觸發(fā) },

onHide: function() { // 頁面切換到后臺觸發(fā) },

onUnload: function() {? // 頁面卸載觸發(fā) },

onPullDownRefresh: function() {? // 頁面下拉刷新觸發(fā)},

onReachBottom: function() { // 頁面上滑觸底觸發(fā) },

onShareAppMessage: function () {

// 頁面點擊轉(zhuǎn)發(fā)觸發(fā),需要return一個object,只有定義了此方法,才會有轉(zhuǎn)發(fā)的功能

return {

title: "分享的頁面", // 分享頁面的標題

path: "/pages/logs/logs" // 分享的頁面的路徑

}

},

onPageScroll: function(options) { // 頁面滾動觸發(fā) },

myFn: function() { // 自定義函數(shù)

console.log(this.route); // 獲取當前頁面的路徑

this.setData({ // 修改狀態(tài)

msg: "haha"

}, function() {

// 狀態(tài)修改完,調(diào)用此方法

})

console.log(getCurrentPages()); // 獲取當前頁面棧實例

}

customData: { // 自定義屬性 }

})

頁面路由

方法wx.navigateTo(object) 跳轉(zhuǎn)到指定的頁面,無法跳轉(zhuǎn)到tabbar頁面(當前頁保留)

wx.navigateTo({

url: ‘/pages/logs/logs?id=1‘, // 頁面路勁,可以傳遞query參數(shù)

success: function() { // 導航成功執(zhí)行

console.log("跳轉(zhuǎn)成功");

},

fail: function() { // 導航失敗執(zhí)行

console.log("跳轉(zhuǎn)失敗");

},

complete: function() { // 導航完成調(diào)用

console.log("導航結(jié)束");

}

})

方法wx.navigateBack(object) 返回到之前的頁面

wx.navigateBack({

delta: 2 // 后退2步

})

方法wx.redirectTo(object) 銷毀當前頁面,跳轉(zhuǎn)到指定的頁面,不能跳轉(zhuǎn)到tabbar頁面

使用方法和navigateTo一樣

方法wx.reLaunch(object) 銷毀所有頁面,跳轉(zhuǎn)到任意指定的頁面

使用方法和navigateTo一樣

方法wx.switchTab(object) 跳轉(zhuǎn)到tabbar頁面

使用方法和navigateTo一樣

模塊化

js文件可以使用exports和module.exports暴露接口

exports是module.exports的一個引用

function fn () {

console.log("導入的方法執(zhí)行了");

}

exports.fn = fn;

使用文件中的方法

var common? = require(‘../common.js‘);

common.fn();

WXML文件細節(jié)

狀態(tài)綁定

變量使用雙大括號包裹 {{msg}}

標簽的屬性使用雙引號包裹

雙引號里面的內(nèi)容wx都會將其轉(zhuǎn)化成字符串,所以true,false要表達本意需要再包裹雙大括號

綁定對象,不需要對象的花括號

列表遍歷

{{index}}: {{item}}

給index和item取別名

{{myIndex}}: {{myItem}}

渲染多節(jié)點代碼塊

{{index}}:

{{item}}

遍歷字符串

{{item}}

綁定key,當組件重排后根據(jù)id可以復用組件和組件的狀態(tài)

{{index}}:

{{item}}

條件渲染

haha

haha1

haha2

同樣也可以使用block來控制多節(jié)點代碼塊

模板

聲明一個模板

{{a}}: {{b}}

使用此模板 obj: { a: 1, b: 2 }

事件

使用bindtap綁定事件

事件對象

myFn: function(event) {

console.log(event);

// 使用data開頭的自定義屬性,將保存再event.currentTarget.dataset中

}

事件分類

冒泡事件

touchstart 開始觸摸

touchmove 觸摸移動

touchcancel 觸摸打斷

touchend 觸摸離開

tap 瞬間觸摸

longpress 超過350ms的觸摸

transitionend 過渡結(jié)束

animationstart 動畫開始

animationiteration 動畫執(zhí)行一遍后觸發(fā)

animationend 動畫結(jié)束觸發(fā)

非冒泡事件,除了上述事件以外都是非冒泡事件

綁定事件

可以使用bind和catch綁定

bindtap或者bind:tap 不阻止冒泡

catchtap或者catch:tap 阻止冒泡

在WXML文件中導入其他WXML文件

可以將上面講的template代碼,放到一個單獨的wxml文件中,然后在當前文件中使用 導入,就可以立即使用了

而的作用,是將除了template和wxs以外的代碼,都拷貝到include所在的位置

wxs的使用(代碼可以單獨寫在wxs文件中,也可以寫在wxs標簽中)

模塊

wxs的作用其實和js文件的作用是一樣的,只不過提供了另外一種方式來寫js

外界要訪問wxs中定義的代碼需要使用module.exports導出

創(chuàng)建一個wxs文件,定義如下代碼

var message = "你好嗎?";

module.exports.message = message;

在wxml文件中使用

首先使用wxs標簽導入

使用 {{wxsData.message}}

在其他wxs文件中使用

var wxsData = require("../common.wxs");

WXSS文件

尺寸單位使用rpx,一個rpx就代表一個物理像素

導入其他WXSS文件 @import "../common.wxss";

自定義組件(和vue里面的組件類似)

創(chuàng)建自定義組件的步驟

第一步,修改json

修改json文件為 { "component": true }

第二部,WXML文件書寫

{{text}}

slot就是插槽,和vue的一樣

第三步,WXSS中書寫

.demo{ color: red; }

只能使用類選擇器

第四部,js文件中寫

Component({

properties: {

// 組件的屬性,可以指定類型和默認值,和vue的props驗證很像

text: {

type: String,

value: ‘默認值‘,

}

},

data: {

// 組件的狀態(tài)

someData: {}

},

methods: {

// 組件的自定義方法

customMethod: function () { }

}

})

第五步,使用組件

在要使用此自定義組件的page中,修改他的json,插入如下字段

"usingComponents": {

"my-component": "../myComponent/myComponent"

}

在page組件中使用 即可

同時可以使用 傳遞屬性值給組件內(nèi)部

WXML文件的細節(jié)

寫法和一般的WXML文件寫法一致,不過多了slot

沒有名字的slot只能有一個,如果要使用多個slot,需要操作如下幾步

第一步,在js中的Component函數(shù)中,添加如下

options: {

multipleSlots: true

},

第二步,在WXML中寫多個帶名字的slot

{{text}}

第三步,在頁面中使用

我是a

我是b

WXSS文件的細節(jié)

只能使用類選擇器

可以繼承組件外的樣式

app.wxss文件中定義的樣式,對組件無效

另外可以使用:host來定義組件標簽的樣式

:host{ color: black; }

js文件的細節(jié)

Component函數(shù)的使用如下

Component({

properties: { // 設置組件接受的屬性

myProperty1: { // 屬性名

type: String, // 類型(必填),目前接受的類型包括:String, Number, Boolean, Object, Array, null(表示任意類型)

value: ‘‘, // 屬性初始值(可選),如果未指定則會根據(jù)類型選擇一個

observer: function(newVal, oldVal){ // 監(jiān)聽屬性值改變的函數(shù) }

},

myProperty2: String // 簡化的定義方式

},

data: {}, // 組件狀態(tài)

methods: { // 設置方法

onMyButtonTap: function(){

console.log(this.id); // 組件標簽的id

console.log(this.dataset); // 組件的data自定義屬性集合

console.log(this.data); // 組件的屬性和狀態(tài)的集合

console.log(this.hasBehavior()) // 組件是否有behavior屬性

this.setData({}) // 屬性和狀態(tài)都可以設置

/*

可以手動觸發(fā)組件的自定義事件,比如,組件上綁定了一個自定義事件

要手動觸發(fā)myEvent,需要調(diào)用

this.triggerEvent(‘myEvent‘, {

// 事件參數(shù)

}, {

bubbles: true, // 是否冒泡

composed: true, // 到父組件內(nèi)部尋找同名事件

capturePhase: true // 是否捕獲

}

);

/

}

},

created: function(){}, // 組件在內(nèi)存中創(chuàng)建完畢執(zhí)行

attached: function(){}, // 組件掛載之前執(zhí)行

ready: function() {}, // 組件掛載后執(zhí)行

detached: function(){}, // 組件移除執(zhí)行

moved: function(){}, // 組件移動的時候執(zhí)行

relations: {

/

嵌套的組件需要相互關(guān)聯(lián)就要使用此字段

相同嵌套子節(jié)點的處理方式

假設嵌套的html結(jié)構(gòu)如下

item 1

item 2

則custom-li組件中需要定義如下的relations

‘./custom-ul‘: { // 嵌套父組件的路徑

type: ‘parent‘, // 關(guān)聯(lián)的目標節(jié)點應為父節(jié)點

linked: function(target) { }, // custom-li插入到custom-ul時執(zhí)行,target是custom-ul

linkChanged: function(target) { }, // custom-li被移動后執(zhí)行,target是custom-ul

unlinked: function(target) {? } // custom-li被移除時執(zhí)行,target是custom-ul

}

在custom-ul組件中也要定義此字段,只不過反過來 type 改成 child

不同嵌套子節(jié)點的處理方式

item 1

item 2

此時就要使用behavior作為公共的節(jié)點路徑了,假設custom-span和custom-div都有一個名為customFormControls的behavior

custom-span和custom-div內(nèi)部定義relations的方式和之前一樣,只不過將type改成ancestor

custom-div中定義

‘customFormControls‘: {

type: ‘descendant‘, // 關(guān)聯(lián)的目標節(jié)點應為子孫節(jié)點

target: customFormControls

}

/

},

behaviors: [

/

behaviors的作用就是用來創(chuàng)建一個公用的組件js,內(nèi)部代碼和Component一模一樣

Behavior({ //... })

主要用來和當前的Component代碼合并,同名的屬性以當前組件的為主

*/

]

})

按需加載

實現(xiàn)按需加載的步驟如下

主包中應只包含tabbar

第一步,在項目根目錄下創(chuàng)建分包的文件夾,將分包的page寫在里面

第二步,在app.json中添加如下配置

"subPackages": [

{

"root": "package1", // 分包文件夾根路徑

"pages": [ // 分包中包含的路徑,不能添加到app.json的page中

"pages/Demo/Demo"

]

}

]

在tabbar配置項中,不能應用分包的頁面

第三步,使用分包文件

在tabbar的頁面中,引用分包頁

wx.navigateTo({

url: ‘../../package1/pages/Demo/Demo‘

})

作者:Q軒哥

鏈接:http://www.lxweimin.com/p/4a618a441d1c

來源:簡書

簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。

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

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

  • 因新工作主要負責微信小程序這一塊,最近的重心就移到這一塊,該博客是對微信小程序整體的整理歸納以及標明一些細節(jié)點,初...
    majun00閱讀 7,427評論 0 9
  • 配置文件 app.json的配置(全局) {// 用來配置頁面的路徑"pages":["pages/index/i...
    Q軒哥閱讀 27,200評論 2 31
  • 1.小程序起步 (1)點擊https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon閱讀 3,439評論 0 0
  • 今天照舊七點多去寄托班接孩子,孝杰見到我以后就馬上跟我說要跟我分享一件事情。說完就從書包里拿出了他的獎狀。我說:“...
    林丸子同學閱讀 208評論 0 2
  • “舞不盡生旦凈末丑,唱不完世間百世情”。 每每春末夏初之時,頭腦中最揮之不去的一件事便是“看戲”了。 成長在大都市...
    海綿青年閱讀 374評論 0 1