创建项目
图形界面创建项目:安装 HBuilderX
命令行创建:
- 全局安装 vue-cli:
npm install -g @vue/cli
- 创建 uni-app:
vue create -p dcloudio/uni-preset-vue my-project
- 运行/发布 uni-app:
npm run dev:%PLATFORM%
npm run build:%PLATFORM%
%PLATFORM%
的值可以是:app-plus
、h5
、mp-alipay
、mp-baidu
、mp-weixin
、mp-toutiao
、mp-qq
、mp-360
、quickapp-webview
、quickapp-webview-union
、quickapp-webview-huawei
安装类型声明文件:npm i @types/uni-app -D
uni-app 使用 vue 的语法 + 小程序的标签和 API。
- 全局安装 vue-cli:
开发规范
为了兼容多端开发,综合考虑编译速度、运行性能等因素,约定如下开发规范:
- 页面文件遵循 Vue 单文件组件 (SFC) 规范
- 组件标签靠近小程序规范,详见uni-app 组件规范
- 接口能力(JS API)靠近微信小程序规范,但需将前缀 wx 替换为 uni,详见uni-app接口规范
- 数据绑定及事件处理同 Vue.js 规范,同时补充了App及页面的生命周期
- 为兼容多端运行,建议使用flex布局进行开发
目录结构
一个uni-app工程,默认包含如下目录及文件:
1 | ┌─uniCloud 云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb(详见uniCloud) |
- 编译到任意平台时,
static
目录下的文件均会被完整打包进去,且不会编译。非static
目录下的文件(vue、js、css 等)只有被引用到才会被打包编译进去。 static
目录下的 js 文件不会被编译,如果里面有es6
的代码,不经过转换直接运行,在手机设备上会报错。css
、less/scss
等资源不要放在static
目录下,建议这些公用的资源放在自建的common
目录下。
资源路径说明
静态资源
1 | <!-- 绝对路径,/static指根目录下的static目录,在cli项目中/static指src目录下的static目录 --> |
@
开头的绝对路径以及相对路径会经过base64转换规则校验- 引入的静态资源在非h5平台,均不转为base64。
- H5平台,小于4kb的资源会被转换成base64,其余不转。
- 自
HBuilderX 2.6.6
起template
内支持@
开头路径引入静态资源,旧版本不支持此方式 - App平台自
HBuilderX 2.6.9
起template
节点中引用静态资源文件时(如:图片),调整查找策略为【基于当前文件的路径搜索】,与其他平台保持一致 - 支付宝小程序组件内 image 标签不可使用相对路径
使用
@
方式的绝对引入
JS文件引入
1 | // 绝对路径,@指向项目根目录,在cli项目中@指向src目录 |
- js文件不支持使用
/
开头的方式引入使用
@
方式的绝对引入
CSS引入静态资源
1 | /* 绝对路径 */ |
@
开头的绝对路径以及相对路径会经过base64转换规则校验- 不支持本地图片的平台,小于40kb,一定会转base64。(共四个平台mp-weixin, mp-qq, mp-toutiao, app v2)
- h5平台,小于4kb会转base64,超出4kb时不转。
- 其余平台不会转base64
路由
运行环境判断
平台判断
- 编译期判断 编译期判断,即条件编译,不同平台在编译出包后已经是不同的代码。
1
2
3// #ifdef H5
alert("只有h5平台才有alert方法")
// #endif - 运行期判断 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用
uni.getSystemInfoSync().platform
判断客户端环境是 Android、iOS 还是小程序开发工具。1
2
3
4
5
6
7
8
9
10
11switch(uni.getSystemInfoSync().platform){
case 'android':
console.log('运行Android上')
break;
case 'ios':
console.log('运行iOS上')
break;
default: // 默认为: devtools
console.log('运行在开发者工具上')
break;
}
移除Android初次打开请求权限
App适配自定义导航栏
当前环境无法运行“VUE2”版本的uni-app应用!
前提
- 使用 Hbuilder X 云打包生成APP
- 本地OS:Windows 10
- Vue 3版本
- 因要适配更低本版的安卓系统,把Vue 3降级为Vue 2
结果出现:
当前环境无法运行“VUE2”版本的uni-app应用!
解决办法:删除项目目录内的
your-app/unpackage/cache
文件夹,并重新打包。
uni-app部分$refs
为undefined
$refs
为undefined
问题描述
同一个页面,使用同一套组件(uni-ui)库,在使用$refs
应用组件时,可获取到部分,部分组件却为undefined
。
原因
- 小程序和App平台不能引用 view 等内置组件
- uni里面的内置组件(view text)不能使用ref 如果是自定义组件的话 可以用ref获取到
- 循环创建的自定义组件的话 ref也不能用了
解决方法
使用uni.selectorQuery
, 类似原生DOM选择器:
1 | const selector = uni.createSelectorQuery().in(this).select("#id")._component.$children |
uni-app云打包后安卓发不出http请求
云打包相关
iOS上传TestFlight提示ITMS-90078: Missing Push Notification Entitlement
ITMS-90078: Missing Push Notification Entitlement
在建立App ID 有选择了推送服务,但是在开发中打包时没有配置推送的权限所导致!
到苹果开发者中心,找到相应应用到App IDs,点击Edit,关闭Push Notifications功能