MINA是微信開發(fā)小程序的框架:
MINA的目標(biāo)是通過盡可能簡(jiǎn)單,高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生APP體驗(yàn)的服務(wù)。
運(yùn)行MINA的項(xiàng)目必須要有微信web開發(fā)者工具
和微信小程序的AppID
,因?yàn)楝F(xiàn)在還處于內(nèi)測(cè)階段的原因,因此大部分?jǐn)?shù)人還沒有AppID
,還好有大神已經(jīng)破解了IDE,可以先體驗(yàn)下,詳情請(qǐng)參考微信小程序開發(fā)資料收集
MINA框架中有四種類型的文件:
-
.js
文件 基于JavaScript的邏輯層框架 -
.wxml
視圖層文件,是MINA設(shè)計(jì)的一套標(biāo)簽語言 -
.wxss
樣式文件,用于描述WXML的組件樣式 -
.json
文件,配置文件,用于單個(gè)頁面的配置和整個(gè)項(xiàng)目的配置
目錄結(jié)構(gòu)
為了減少配置項(xiàng),小程序中一個(gè)頁面中的四個(gè)文件必須要有相同的路徑和文件名,使用微信web開發(fā)者工具
新建一個(gè)項(xiàng)目,可以看到他的目錄結(jié)構(gòu)是這樣的:
其中app.js
是程序的入口,app.json
是項(xiàng)目的配置文件,app.wxss
是全局配置的樣式文件,logs
和index
文件夾是是單個(gè)頁面的文件,utils
用來存放常用的工具類文件夾。
app.js
app.js
使用App()
函數(shù)注冊(cè)一個(gè)小程序,可以指定小程序的生命周期
小程序的App()
生命周期中三個(gè)事件可以監(jiān)聽:onLaunch
,onShow
,onHide
。
-
onLaunch
:小程序加載完成之后調(diào)用,全局只觸發(fā)一次 -
onShow
: 小程序啟動(dòng),或者從后臺(tái)到前臺(tái)會(huì)觸發(fā)一次 -
onHide
:小程序從前臺(tái)到后臺(tái)會(huì)觸發(fā)一次
例如:
App({
onLaunch: function () {
console.log('App Launch')
},
onShow: function () {
console.log('App Show')
},
onHide: function () {
console.log('App Hide')
},
globalData: {
hasLogin: false
}
})
其中app.js
的globalData
可以設(shè)置全局的變量,在一個(gè)頁面中可以通過getApp()
函數(shù)獲取小程序的實(shí)例,使用App的getCurrentPage()
可以獲取到當(dāng)前頁面的實(shí)例。
app.json
app.json
是小程序的全局配置包括:頁面的路徑,窗口表現(xiàn),設(shè)置網(wǎng)絡(luò)超時(shí),開發(fā)模式等...
- 頁面配置
pages
:設(shè)置頁面的路徑
"pages":[
"pages/index/index",
"pages/logs/logs"
]
配置的index
和logs
兩個(gè)頁面的路徑,在這里使用相對(duì)路徑配置頁面路徑。
- 窗口配置
windows
:用來配置狀態(tài)欄的顏色,導(dǎo)航條的樣式和顏色,標(biāo)題,已經(jīng)窗口的背景色:
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
使用的Color為十六進(jìn)制的顏色值,比如"#ffffff"
注意:
其中navigationBarTextStyle
,導(dǎo)航欄的顏色僅支持black/white
。
而backgroundTextStyle
,下拉背景的樣式僅支持dark/light
。
-
tabBar
: 設(shè)置tab應(yīng)用,tabBar
是一個(gè)數(shù)組,最少需要配置2個(gè),最多能配置5個(gè)tab,tab按照數(shù)據(jù)的順序排序:
"tabBar":{
"color":"#dddddd",
"selectdColor":"#3cc51f",
"borderStyle":"black",
"backgroundColor":"#ffffff"
,"list":[
{
"pagePath":"pages/index/index",
"iconPath":"image/wechat.png",
"selectedIconPath":"image/wechatHL.png",
"text":"主頁"
},{
"pagePath":"pages/logs/logs",
"iconPath":"image/wechat.png",
"selectedIconPath":"image/wechatHL.png",
"text":"日志"
}]
}
這里設(shè)置了兩個(gè)tab頁:index
和log
,效果如下:
-
networkTimeout
設(shè)置網(wǎng)絡(luò)請(qǐng)求的超時(shí)時(shí)間,小程序有四種類型的網(wǎng)絡(luò)請(qǐng)求
-
wx.request
普通的http請(qǐng)求,配置為request
-
wx.connect
stock鏈接,配置為connectSocket
-
wx.uploadFile
上傳文件,配置為uploadFile
-
wx.downloadFile
下載文件,配置為downloadFile
配置單位為毫秒,例如:
"networkTimeout": {
"request": 10000,
"connectSocket": 10000,
"uploadFile": 10000,
"downloadFile": 10000
}
-
debug
:開發(fā)工具中開啟debug模式,在控制臺(tái)面板上可以看到調(diào)試信息,我們也可以使用console.log('onLoad')
輸入log幫助我們調(diào)試程序。
"debug": true
app.wxss
app.wxss
中定義的的樣式為全局樣式,作用在每一個(gè)頁面,在page中定義的.wxss
文件為局部樣式,只作用在局部,局部樣式中的定義會(huì)覆蓋app.wxss
中定義的樣式。
樣式的定義:
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 200rpx 0;
box-sizing: border-box;
}
其中200rpx
中的rpx
是reponslve pixel
,可以根據(jù)屏幕的寬度進(jìn)行自適應(yīng),在iPhone6
上1rpx=0.5px=1
物理像素。微信小程序建議設(shè)計(jì)以iPhone6
為準(zhǔn)
樣式的使用:
<view class="container">
</view>
page
使用Page()函數(shù)來注冊(cè)一個(gè)頁面,為其指定頁面的初始數(shù)據(jù),生命周期函數(shù),事件處理等。
-
data
頁面的初始數(shù)據(jù),可以使用setData更新定義的數(shù)據(jù) -
onLoad
頁面加載事件 -
onReady
頁面渲染完成 -
onShow
頁面顯示 -
onHide
頁面隱藏 -
onUnload
頁面卸載
例如:
Page({
data: {
logs: []
},
onLoad: function () {
this.setData({
logs: (wx.getStorageSync('logs') || []).map(function (log) {
return util.formatTime(new Date(log))
})
})
}
})
page另外使用的文件.wxml
是頁面文件,使用定義好一套標(biāo)簽語言,.wxss
是局部樣式文件,.json
局部配置文件比如需要在一個(gè)單獨(dú)的頁面中設(shè)置他的navigationBarTitleText
,可以在.json
文件中設(shè)置:
{
"navigationBarTitleText": "日志文件"
}