目录
框架介绍
开发规范
目录结构
生命周期
应用生命周期
页面生命周期
路由
路由跳转
页面栈
运行环境判断
开发环境和生产环境
页面样式与布局
尺寸单位
样式导入
内联样式
选择器
全局样式与局部样式
CSS变量
固定值
Flex布局
背景图片
字体图标
为了实现多端兼容,综合考虑编译速度、运行性能等因素,uni-app
约定了如下开发规范:
wx
替换为 uni
,详见uni-app接口规范Vue.js
规范,同时补充了App及页面的生命周期一个uni-app工程,默认包含如下目录及文件:
┌─components uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─hybrid 存放本地网页的目录,详见
├─platforms 存放各平台专用页面的目录,详见
├─pages 业务页面文件存放的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─wxcomponents 存放小程序组件的目录,详见
├─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见
└─pages.json 配置页面路由、导航条、选项卡等页面类信息,详见
提示:
static
目录下的 js
文件不会被编译,如果里面有 es6
的代码,不经过转换直接运行,在手机设备上会报错。css
、less/scss
等资源同样不要放在 static
目录下,建议这些公用的资源放在 common
目录下。ext.json
、sitemap.json
文件。注意因为表格显示有问题,这里我就直接截的图,表格中的链接请看官方文档:uni-app官方文档
uni-app
支持如下应用生命周期函数:
注意
uni-app 支持如下页面生命周期函数
onPageScroll 参数说明:
onTabItemTap
参数说明:
注意
onNavigationBarButtonTap
参数说明:
onBackPress
回调参数对象的说明
uni-app
路由全部交给框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式,不支持 Vue Router
。
uni-app
有两种路由跳转方式:使用navigator组件跳转、调用API跳转。
框架以栈的形式管理当前所有页面, 当发生路由切换的时候,页面栈的表现如下:
文档:页面栈
uni-app
可通过 process.env.NODE_ENV
判断当前环境是开发环境还是生产环境。一般用于连接测试服务器或生产服务器的动态切换。
if(process.env.NODE_ENV === 'development'){
console.log('开发环境')
}else{
console.log('生产环境')
}
快捷代码块
HBuilderX 中敲入代码块 uEnvDev
、uEnvProd
可以快速生成对应 development
、production
的运行环境判定代码。
// uEnvDev
if (process.env.NODE_ENV === 'development') {
// TODO
}
// uEnvProd
if (process.env.NODE_ENV === 'production') {
// TODO
}
判断平台
平台判断有2种场景,一种是在编译器判断,一种是在运行期判断。
// #ifdef H5
alert("只有h5平台才有alert方法")
// #endif
如上代码只会编译到H5的发行包里,其他平台的包不会包含如上代码。
uni.getSystemInfoSync().platform
判断客户端环境是 Android、iOS 还是小程序开发工具(在百度小程序开发工具、微信小程序开发工具、支付宝小程序开发工具中使用 uni.getSystemInfoSync().platform
返回值均为 devtools)。switch(uni.getSystemInfoSync().platform){
case 'android':
console.log('运行Android上')
break;
case 'ios':
console.log('运行iOS上')
break;
default:
console.log('运行在开发者工具上')
break;
}
如有必要,也可以在条件编译里自己定义一个变量,赋不同值。在后续运行代码中动态判断环境。
uni-app
支持的通用 css 单位包括 px、rpx
vue页面支持普通H5单位,但在nvue里不支持:
nvue还不支持百分比单位。
App端,在pages.json里的titleNView或页面里写的 plus api中涉及的单位,只支持px。注意此时不支持px
nvue中,uni-app 模式(nvue 不同编译模式介绍)可以使用 px 、rpx,表现与 vue 中一致。weex 模式目前遵循weex的单位,它的单位比较特殊:
下面对 rpx
详细说明:
设计师在提供设计图时,一般只提供一个分辨率的图。
严格按设计图标注的 px 做开发,在不同宽度的手机上界面很容易变形。
而且主要是宽度变形。高度一般因为有滚动条,不容易出问题。由此,引发了较强的动态宽度单位需求。
微信小程序设计了 rpx 解决这个问题,uni-app
在 App 端、H5 端都支持了 rpx
。
rpx 是相对于基准宽度的单位,可以根据屏幕宽度进行自适应。uni-app
规定屏幕基准宽度 750rpx。
开发者可以通过设计稿基准宽度计算页面元素 rpx 值,设计稿 1px 与框架样式 1rpx 转换公式如下:
设计稿 1px / 设计稿基准宽度 = 框架样式 1rpx / 750rpx
换言之,页面元素宽度在 uni-app
中的宽度计算公式:
750 * 元素在设计稿中的宽度 / 设计稿基准宽度
举例来说:
Tips
使用@import
语句可以导入外联样式表,@import
后跟需要导入的外联样式表的相对路径,用;
表示语句结束。
示例代码:
框架组件上支持使用style、class属性来控制组件的样式
目前支持的选择器有:
注意:
page {
background-color:#ccc;
}
定义在App.vue中的样式为全局样式,作用与每个页面。在pages目录下的vue文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖App.vue中相同的选择器。
注意:App.vue中通过@import语句可以导入外联样式,一样作用于每一个页面
uni-app提供内置CSS变量
注意:
代码块
快速书写css变量的方法是:在css中敲hei,在候选助手中即可看到3个css变量。(HBuilderX 1.9.6以上支持)
示例:
状态栏下的文字
uni-app 中以下组件的高度是固定的,不可修改:
为支持跨平台,框架建议使用Flex布局,关于Flex布局可以参考外部文档A Complete Guide to Flexbox、阮一峰的flex教程等。
uni-app
支持使用在 css 里设置背景图片,使用方式与普通 web
项目相同,需要注意以下几点:
uni-app
会自动将其转化为 base64 格式;.test2 {
background-image: url('~@/static/logo.png');
}
uni-app
支持使用字体图标,使用方式与普通 web
项目相同,需要注意以下几点:
https
。uni-app
本地路径图标字体支持情况:uni-app
会自动将其转化为 base64 格式; @font-face {
font-family: test1-icon;
src: url('~@/static/iconfont.ttf');
}
示例:
uni-app
支持在 template 模板中嵌套 和
,用来进行 列表渲染 和 条件渲染。
和
并不是一个组件,它们仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。
代码示例
test 为 true 时显示
test 为 false 时显示
{{item}} - {{index}}
小程序组件支持
uni-app
支持在 5+App 和小程序中使用小程序组件。
平台差异说明
此文档要求开发者对各端小程序的自定义组件有一定了解,没接触过小程序自定义组件的可以参考:
目录结构
使用方式
在 pages.json
对应页面的 style -> usingComponents 引入组件:
{
"pages": [
{
"path": "index/index",
"style": {
"usingComponents": {
// #ifdef APP-PLUS || MP-WEIXIN
"custom": "/wxcomponents/custom/index"
// #endif
// #ifdef MP-BAIDU
"custom": "/swancomponents/custom/index"
// #endif
// #ifdef MP-ALIPAY
"custom": "/mycomponents/custom/index"
// #endif
}
}
}
]
}
在页面中使用
注意事项
wxcomponents
(或 mycomponents、swancomponents)。wxcomponents
文件夹在 项目根目录下。wxcomponents
文件夹在 src
目录下。详细的小程序转uni-app语法差异可参考文档https://ask.dcloud.net.cn/article/35786。