Uniapp
注意事项
- webview 中网页的的 localStorage 和 uniapp 中的 localStorage 是完全独立的两个环境
- uniapp 使用自带基座调试时
plus.runtime.appid
获取的 appid 为 HBuilder,打包后的运行时获取的 appid 为 项目实际配置的 appid - 浏览器跨域插件。HBuilderX 内置浏览器调试-自动跨域。模拟地理位置
- uniapp H5 调试环境-定位支持【腾讯地图H5 appkey】、坐标解析支持。绝大多数页面功能在 H5 环境中调试,提高开发效率
学习要求
基础:介绍【了解】、教程【熟悉】、全局文件【熟悉】、工程化【了解】、插件【了解】
重点: 组件和 API 【熟练】
通过 CLI 创建 uni-app 项目
1 | vue create -p /Users/wangwz/HBuilderProjects/uni-preset-vue uniapp-cli-demo |
CLI 工程默认带了 uni-app 语法提示和 5+App 语法提示
运行项目
1 | npm run dev:%PLATFORM% |
发布项目
1 | npm run build:%PLATFORM% |
%PLATFORM%
可取值如下:
值 | 平台 |
---|---|
H5 | H5 |
APP-PLUS | App |
MP-ALIPAY | 支付宝小程序 |
MP-BAIDU | 百度小程序 |
MP-WEIXIN | 微信小程序 |
MP-TOUTIAO | 头条小程序 |
MP-QQ | qq 小程序 |
HBuilderX 创建的工程默认不带 types 语法提示,在 WebStorm 中编辑的时候,可以自行安装
1 | //初始化 npm(如已初始化跳过此步骤) |
使用 HTML5+ 接口注意事项
https://uniapp.dcloud.net.cn/use-html5plus
条件编译「H5、App」
https://uniapp.dcloud.net.cn/platform
1 | //1. API 的条件编译 |
运行环境判断「开发、生产」
https://uniapp.dcloud.net.cn/frame?id=运行环境判断
1 | if (process.env.NODE_ENV === 'development') { |
判断运行平台「Android、iOS」
平台判断有2种场景,一种是在编译期判断,一种是在运行期判断
编译期判断
编译期判断,即条件编译,不同平台在编译出包后已经是不同的代码
运行期判断
运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用 uni.getSystemInfoSync().platform
1 | switch(uni.getSystemInfoSync().platform){ |
各端规则
每个端,有每个端的管理规则,这不是uni-app在技术层面上可以抹平的:
- 比如H5端的浏览器有跨域限制;
- 比如微信小程序会强制要求https链接,并且所有要联网的服务器域名都要配到微信的白名单中;
- 比如App端,iOS对隐私控制和虚拟支付控制非常严格;
- 比如App端,Android、国产rom各种兼容性差异,尤其是因为谷歌服务被墙,导致的push、定位等开发混乱的坑;
- 如果你的App要使用三方sdk,比如定位、地图、支付、推送…还要遵循他们的规则和限制;
遇事耐心,不急不躁,虽然这不是成功的唯一要素,但它是你技术路上长远走下去的基础
自定义条件编译平台(如钉钉小程序、微信服务号等平台)
自定义环境
https://uniapp.dcloud.io/collocation/package
dev 和 build 模式的区别
- dev 模式有 SourceMap 可以方便的进行断点调试
- build 模式会将代码进行压缩,体积更小更适合发布为正式版应用
- 进行 环境判断 时,dev 模式 process.env.NODE_ENV 的值为 development,build 模式 process.env.NODE_ENV 的值为 production
高效开发技巧
https://uniapp.dcloud.net.cn/snippet
Android 原生插件开发
https://nativesupport.dcloud.net.cn/NativePlugin/course/android
uni-app 离线打包 Android 平台注意事项
https://ask.dcloud.net.cn/article/35139
APP 打包注意事项
https://nativesupport.dcloud.net.cn/AppDocs/FAQ/android
页面间数据通信
https://uniapp.dcloud.net.cn/collocation/frame/communication
注意事项
- uni.$emit、 uni.$on 、 uni.$once 、uni.$off 触发的事件都是 App 全局级别的,跨任意组件,页面,nvue,vue 等
- 使用时,注意及时销毁事件监听,比如,页面 onLoad 里边 uni.$on 注册监听,onUnload 里边 uni.$off 移除,或者一次性的事件,直接使用 uni.$once 监听
1 | uni.$emit('update',{msg:'页面更新'}) |
语音识别
- 语音识别功能,使用 HBuilder 自带基座或云打包没问题,因为 DCloud 申请了免费的讯飞或百度 APPID
- 离线打包时失效,需要自己注册填写 APPID。目前百度语音识别需要付费开通且企业认证。目前官方提供的离线打包资源中 讯飞语音 uni 插件已经删除,暂时不支持离线集成
在通知栏创建通知、监听点击事件
https://www.html5plus.org/doc/zh_cn/push.html
1 | plus.push.createMessage( "闹铃来了", {content: "123456"}, {title: "智慧执法"} ); |
调试技巧
H5 调试组件 data 数据
打开控制台,点击 Vue【浏览器已安装dev-tools 插件】,点击 components ,根据地址栏显示的页面路径,输入【路径去掉斜杠】,就可快速定位到页面组件
离线打包制作自定义基座
android——离线打包制作自定义基座 - DCloud问答
小结
滚动到页面底部
1
2
3
4
5
6
7
8
9
10scrollToBottom() {
this.$nextTick(function() {
setTimeout(() => {
uni.pageScrollTo({
scrollTop: 99999,
duration: 0
})
}, 200) // 要加点延迟, 不然有可能不生效
});
}通过返回键返回到首页面
1
2
3
4
5
6onBackPress(event){
uni.switchTab({
url: '/pages/index/index'
})
return true;
},隐藏页面导航栏返回图标
https://uniapp.dcloud.net.cn/collocation/pages?id=app-titlenview
修改 pages.json
1
2
3
4
5
6
7
8
9
10
11
12{
"path": "pages/eventReg/location",
"style": {
"navigationBarTitleText": "案件地点",
"navigationStyle": "custom",
"app-plus": {
"titleNView":{
"autoBackButton":false
}
}
}
},页面横竖屏切换
1
2
3
4
5
6
7
8
9
10onLoad() {
// #ifdef APP-PLUS
plus.screen.lockOrientation('landscape-primary'); //横屏
// #endif
},
onUnload() {
// #ifdef APP-PLUS
plus.screen.lockOrientation('portrait-primary'); //竖屏
// #endif
}
问题
HBuilderX 3.3.2 以下版本 App 端 uni.getLocation 存在 type 参数不生效的 bug
HBuilderX 3.3.2+ uni.getLocation 更新注意事项 - DCloud问答