一 MINA框架
当我们用小程序的快速启动模版创建项目的时候,我们已经使用了小程序自带的框架MINA。
这个开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生APP体验的服务。
框架提供了自己的视图层描述语言WXML和WXSS,以及基于JavaScript的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上。
二 响应的数据绑定
MINA的核心是一个响应的数据绑定系统。
整个系统分为两块视图层(View)和逻辑层(App Service)
举个简单的例子:
在快速启动的模板项目中,在pages/index/index.wxml(视图层)中写如下代码:
<view> Hello {{name}}! </view>
<button bindtap="changeName"> Click me! </button>
在pages/index/index.js(逻辑层):
var helloData = {
name: 'world'
}
Page({
data:helloData,
changeName(){
this.setData({
name: 'MINA'
})
}
})
开发者通过框架将逻辑层数据中的name与视图层的name进行了绑定,所以在页面一打开的时候会显示Hello world!
当点击按钮的时候,视图层会发送changeName的事件给逻辑层,逻辑层找到对应的事件处理函数
逻辑层执行了setData的操作,将name从weChat变为MINA,因为该数据和视图层已经绑定了,从而视图层会自动响应改变为Hello MINA! 。
三 页面管理
MINA框架管理了整个小程序的页面路由,可以做到页面的无缝切换,并给以页面完整的生命周期,开发者需要做的只是将页面的数据、方法、生命周期函数注册进框架中,其它一切的操作都交由我们的MINA处理。
四 MINA文件结构
一个小程序主体部分由三个文件组成,必须放在项目的根目录下
app.js:必填,负责小程序的逻辑
app.json:必填,负责小程序公共设置
app.wxss:非必填,负责小程序公共样式表
五 框架页面
一个框架页面由四个文件组成:
js:必填,页面逻辑
wxml:必填,页面结构
wxss:非必填,页面样式表
hson:非必填,页面配置
注意:为了方便开发者减少配置项,小程序规定描述页面的这四个文件必须具有相同的路径与文件名,当然我们在app.json的pages新建相应的页面自然会建立一个包含四个文件的规范框架页面
六 小程序配置
我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。
以下是一个包含了所有配置选项的简单配置app.json
{
"pages": [
"pages/index/index",
"pages/logs/index"
],
"window": {
"navigationBarTitleText": "Demo"
},
"tabBar": {
"list": [{
"pagePath": "pages/index/index",
"text": "首页"
}, {
"pagePath": "pages/logs/logs",
"text": "日志"
}]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
},
"debug": true
}
显而易见的人性化json选项,我们可以从代码中阅读他们的相关作用。
1.pages
接受一个数组,每一项都是字符串,来指定小程序由哪些页面组成。每一项代表对应页面的【路径+文件名】信息,数组的第一项代表小程序的初始页面。小程序中新增/减少页面,都需要对 pages 数组进行修改。
文件名不需要写文件后缀,因为框架会自动去寻找路径.json,.js,.wxml,.wxss的四个文件进行整合。
2.window
用于设置小程序的状态栏、导航条、标题,窗口背景色.
可以在app.json的window选项中配置这些选项试试看都是什么效果。
3.tabBar
如果我们的小程序是一个多 tab 应用(客户端窗口的底部有tab栏可以切换页面),那么我们可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。
4.debug
可以在开发者工具中开启 debug 模式,在开发者工具的控制台面板,调试信息以 info 的形式给出,其信息有Page的注册,页面路由,数据更新,事件触发 。可以帮助开发者快速定位一些常见的问题。
5.page.json
每一个小程序页面也可以使用.json文件来对本页面的窗口表现进行配置。页面的配置比app.json全局配置简单得多,只是设置 app.json 中的 window 配置项的内容,页面中配置项会覆盖 app.json 的 window 中相同的配置项。
页面的.json只能设置window相关的配置项,以决定本页面的窗口表现,所以无需写window这个key。