MINA是微信开发小程序的框架:
> MINA的目标是通过尽可能简单,高效的方式让开发者可以在微信中开发具有原生APP体验的服务。
运行MINA的项目必须要有`微信web开发者工具`和`微信小程序的AppID`,因为现在还处于内测阶段的原因,因此大部分数人还没有`AppID`,还好有大神已经破解了IDE,可以先体验下,详情请参考[微信小程序开发资料收集](http://www.jianshu.com/p/03568b06164c)
MINA框架中有四种类型的文件:
* `.js`文件 基于JavaScript的逻辑层框架
* `.wxml` 视图层文件,是MINA设计的一套标签语言
* `.wxss` 样式文件,用于描述WXML的组件样式
* `.json` 文件,配置文件,用于单个页面的配置和整个项目的配置
# 目录结构
为了减少配置项,小程序中一个页面中的四个文件必须要有相同的路径和文件名,使用`微信web开发者工具`新建一个项目,可以看到他的目录结构是这样的:
![](http://upload-images.jianshu.io/upload_images/22188-82c5408a9f5a52a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
目录结构
其中`app.js`是程序的入口,`app.json`是项目的配置文件,`app.wxss`是全局配置的样式文件,`logs`和`index`文件夹是是单个页面的文件,`utils`用来存放常用的工具类文件夹。
## app.js
`app.js`使用`App()`函数注册一个小程序,可以指定小程序的生命周期
小程序的`App()`生命周期中三个事件可以监听:`onLaunch`,`onShow`,`onHide`。
* `onLaunch`:小程序加载完成之后调用,全局只触发一次
* `onShow`: 小程序启动,或者从后台到前台会触发一次
* `onHide`:小程序从前台到后台会触发一次
例如:
~~~
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`可以设置全局的变量,在一个页面中可以通过`getApp()`函数获取小程序的实例,使用App的`getCurrentPage()`可以获取到当前页面的实例。
## app.json
`app.json`是小程序的全局配置包括:页面的路径,窗口表现,设置网络超时,开发模式等...
* 页面配置`pages`:设置页面的路径
~~~
"pages":[
"pages/index/index",
"pages/logs/logs"
]
~~~
配置的`index`和`logs`两个页面的路径,在这里使用相对路径配置页面路径。
* 窗口配置`windows`:用来配置状态栏的颜色,导航条的样式和颜色,标题,已经窗口的背景色:
~~~
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
~~~
使用的Color为十六进制的颜色值,比如"#ffffff"
注意:
其中`navigationBarTextStyle`,导航栏的颜色仅支持`black/white`。
而`backgroundTextStyle`,下拉背景的样式仅支持`dark/light`。
* `tabBar`: 设置tab应用,`tabBar`是一个数组,最少需要配置2个,最多能配置5个tab,tab按照数据的顺序排序:
~~~
"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":"日志"
}]
}
~~~
这里设置了两个tab页:`index`和`log`,效果如下:
![](http://upload-images.jianshu.io/upload_images/22188-d953160247d07d5a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
tab
* `networkTimeout`设置网络请求的超时时间,小程序有四种类型的网络请求
1. `wx.request`普通的http请求,配置为`request`
2. `wx.connect` stock链接,配置为`connectSocket`
3. `wx.uploadFile`上传文件,配置为`uploadFile`
4. `wx.downloadFile`下载文件,配置为`downloadFile`
配置单位为毫秒,例如:
~~~
"networkTimeout": {
"request": 10000,
"connectSocket": 10000,
"uploadFile": 10000,
"downloadFile": 10000
}
~~~
* `debug`:开发工具中开启debug模式,在控制台面板上可以看到调试信息,我们也可以使用`console.log('onLoad')`输入log帮助我们调试程序。
~~~
"debug": true
~~~
## app.wxss
`app.wxss`中定义的的样式为全局样式,作用在每一个页面,在page中定义的`.wxss`文件为局部样式,只作用在局部,局部样式中的定义会覆盖`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`,可以根据屏幕的宽度进行自适应,在`iPhone6`上`1rpx=0.5px=1`物理像素。微信小程序建议设计以`iPhone6`为准
样式的使用:
~~~
<view class="container">
</view>
~~~
## page
使用Page()函数来注册一个页面,为其指定页面的初始数据,生命周期函数,事件处理等。
* `data` 页面的初始数据,可以使用setData更新定义的数据
* `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`是页面文件,使用定义好一套标签语言,`.wxss`是局部样式文件,`.json`局部配置文件比如需要在一个单独的页面中设置他的`navigationBarTitleText`,可以在`.json`文件中设置:
~~~
{
"navigationBarTitleText": "日志文件"
}
~~~
源代码地址:[https://github.com/jjz/weixin-mina](https://github.com/jjz/weixin-mina)
文/姜家志(简书作者)
原文链接:http://www.jianshu.com/p/83fe02e417d0
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
- PHP学习
- PHP应用
- PHP函数总结整理
- 39个对初学者非常有用的PHP技巧
- 深入浅出之Smarty模板引擎工作机制
- 数组操作
- file操作的常用方法
- PHP字符串输出之Heredoc说明
- require(_once)和include(_once)的理解
- PHP提高效率的几点
- php无限遍历目录
- 53个要点提高PHP编程效率
- THINKPHP
- THINKPHP 常见的问题
- 微信
- 微信公众号接口
- 微信小程序开发资料收集
- 微信小程序开发:MINA
- 通过微信小程序看前端
- 微信小程序开发初体验
- 微信小程序 Demo(豆瓣电影)
- API应用
- 支付宝
- 二维码转换
- 前端开发
- HTML5
- CSS
- 七种css方式让一个容器水平垂直居中
- JavaScript
- JavaScript奇技淫巧44招
- JavaScript笔记
- 后端开发
- Node
- SQL数据库
- 服务维护
- git使用
- Git入门私房菜
- MAC终端维护
- VIM命令大全
- 开发规范
- 智能手机屏幕的秘密
- 超实用六步透视网易设计规范(附完整PDF下载)
- UI设计常用字体规范
- APP界面切图命名和文件整理规范
- 网页UI视觉设计规范
- ios视觉设计规范说明
- 开发APP时需要注意的原则
- 移动端APP设计初步入门
- Axure
- 基础操作
- 基础1-10
- 基础11-20
- 基础21-30
- 基础31-40
- 基础41-50
- 基础51-60
- Sketch
- 软件使用
- sublime3_用户设置
- sublime下如何修改自动补全 后lang=zh-cn?
- 运营理念
- 新人指导心得体会
- 从一次活动设计,聊聊交互设计师的3个阶段
- 详情页优化那些不得不说的细节
- 店铺装修浅析
- 淘宝店铺装修之宝贝详情页的布局教程
- 宝贝详情页 客户需求调研及总结
- 宝贝描述样板房