玩转 uniapp 全端开发
配套视频www.bilibili.com/video/BV1iG…
uniapp 介绍
uni-app
是一个运用Vue.js (opens new window)开发一切前端运用的结构,开发者编写一套代码,可发布到iOS、Android、Web(呼应式)、以及各
种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快运用等多个渠道。
是现在全端开发结构的佼佼者
多端体会
uniapp 优势
uniapp 生态介绍
-
uview
-
uni ui
- 运用文档
- 完好示例
-
hbuilderX
-
插件市场
-
uniCloud
uniapp项目创立
uniapp 项目开发方法分为两种
- vue-cli (只开 h5端 或许 只开发 微信小程序端)
- HBuilderX 可视化 (多端开发首选只开发 手机APP)
vue-cli
创立项目
-
大局装置vue-cli
npm install -g @vue/cli@4 仿制代码
-
创立项目
my-project
项目称号vue create -p dcloudio/uni-preset-vue my-project 仿制代码
-
挑选模版-挑选默许模版
-
成功
运转项目
npm run dev:渠道代号
npm run build:渠道代号
仿制代码
值 | 渠道 |
---|---|
app-plus | app渠道生成打包资源(支撑npm run build:app-plus,可用于持续集成。不支撑run,运转调试仍需在HBuilderX中操作) |
h5 | H5 |
mp-alipay | 支付宝小程序 |
mp-baidu | 百度小程序 |
mp-weixin | 微信小程序 |
mp-toutiao | 字节跳动小程序 |
mp-lark | 飞书小程序 |
mp-qq | qq 小程序 |
mp-360 | 360 小程序 |
mp-kuaishou | 快手小程序 |
mp-jd | 京东小程序 |
mp-xhs | 小红书小程序 |
quickapp-webview | 快运用(webview) |
quickapp-webview-union | 快运用联盟 |
quickapp-webview-huawei | 快运用华为 |
HBuilderX
假如你要运用uiapp开发多端,那么就必须要挑选和它配套的修改东西了HBuilderX
。考虑到后期要运用更多的 uniapp的功能,主张提早注册一个uniapp的开发账号。注册
创立项目
-
下载 HBuilderX
-
新建项目
-
挑选项目
-
创立成功
-
修改器中,敲入
u
+代码 即可调出HBuilderX的代码提示
运转项目
第一次运转,或许需求装置插件,等候即可
uniapp 开发环境建立
uniapp 是全端开发结构,假如咱们想要开发全端,那么首要需求建立好各个端对应的环境。以下拿比较典型的 微信小程序、H5 和 安卓App来演示。发布环境的解说在后续
微信小程序
下载开发者东西
下载地址
下载装置成功后,会在桌面上显现出来一个图标
注册微信小程序开发者账号
别的 想要开发一款微信小程序,必须要注册微信开发者账号,一起获取对应的appid。
获取appid
翻开服务端口
在 HBuilderX 中运转项目
H5
假如运用内置的浏览器预览页面,它是自带跨域的。
一起每一个vue页面中的款式,也是默许自己加上
scoped
的。
运转H5比较简单,只需求电脑上装置好浏览器就行,或许运用 HBuilderX自带内置浏览器也能够
App
因为电脑操作体系限制,咱们只演示android
。
分为两种:
- 运转到模拟器
- 运转到真机
运转到模拟器
安卓模拟器能够自由挑选,这儿我运用的是Android studio内置的模拟器
装置 android studio 模拟器步骤如下:
-
下载 android studio
-
翻开装置包,然后勾选上装置虚拟机
-
翻开
Android Studio
-
-
挑选要装置的手机型号
-
挑选装置对应的安卓体系版别下载进程比较慢,因为体系镜像比较大
-
下载成功了,回到设备列表页面,运转起来
-
开机
-
成功
-
现在能够回到HBuilderX中来运转项目到模拟器里面了
-
HBuilderX会主动检测你电脑上的模拟器或许实在安卓手机
-
成功
-
运转到实在手机
-
准备一台正常的安卓手机,敞开开发人员选项和答应USB调试
-
衔接数据线到电脑上 ,假如弹出什么菜单悉数点击答应
-
这个时分,从头回到 HBuilderX中,点击运转项目到App上
-
此刻你的手机会弹出窗口,提示你装置软件,最后成功显现
App 调试 模拟器调试
-
运转模拟器
-
运转项目
-
翻开webview调试该选项只能调试页面标签和款式,不能调试js
-
点击调试
-
此刻会翻开一个页面调试东西,开端调试
-
模拟器上也会跟着发生改变
-
此刻能够敞开js调试
-
此刻会弹出一个新的窗口 咱们能够在这儿进行调试
App 真机调试
调试方法和 调试模拟器相似。直接操作即可
uniapp 项目结构介绍
uniapp.dcloud.net.cn/tutorial/pr…
┌─uniCloud 云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb
│─components 契合vue组件标准的uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─hybrid App端寄存本地html文件的目录
├─platforms 寄存各渠道专用页面的目录
├─pages 业务页面文件寄存的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 寄存运用引证的本地静态资源(如图片、视频等)的目录,留意:静态资源只能寄存于此
├─uni_modules 寄存[uni_module](/uni_modules)。
├─wxcomponents 寄存小程序组件的目录
├─nativeplugins App原生插件 详见
├─unpackage 非工程代码,一般寄存运转或发行的编译成果
├─main.js Vue初始化进口文件
├─App.vue 运用装备,用来装备App大局款式以及监听 运用生命周期
├─manifest.json 装备运用称号、appid、logo、版别等打包信息
├─pages.json 装备页面路由、导航条、选项卡等页面类信息
└─uni.scss 这儿是uni-app内置的常用款式变量
仿制代码
uniapp 开发标准介绍
为了完结多端兼容,综合考虑编译速度、运转功能等因素,uni-app
约好了如下开发标准
页面和组件文件遵从vue的标准
- 比方 新建页面
goods.vue
- 比方 新建组件
it-item.vue
内置标签运用小程序的标准
<view>小程序中的块级标签</view>
仿制代码
数据绑定和事情处理运用vue的标准
<template>
<view>
<view class="item" v-for="item in list" :key="item" @click="handleClick(item)">{{item}}</view>
</view>
</template>
<script>
export default {
data(){
return {
list:['a','b','c']
}
},
methods:{
handleClick(letter){
console.log(letter)
}
}
}
</script>
仿制代码
能力接口API 运用 微信小程序的标准
比方弹出显现框,发送网络请求等
wx.showToast({
title: '成功',
icon: 'success',
duration: 2000
})
wx.request({
url: 'example.php', //仅为示例,并非实在的接口地址
data: {
x: '',
y: ''
},
header: {
'content-type': 'application/json' // 默许值
},
success (res) {
console.log(res.data)
}
})
仿制代码
考虑到跨端,咱们将会运用uniapp
一致封装的API。简称uni api
uniapp 生命周期
uniapp中,生命周期分类三大类
- 运用生命周期小程序标准
- 页面生命周期小程序标准
- 组件生命周期vue标准
运用生命周期App.vue
函数名 | 阐明 |
---|---|
onLaunch | 当uni-app 初始化完结时触发(大局只触发一次) |
onShow | 当uni-app 启动,或从后台进入前台显现 |
onHide | 当uni-app 从前台进入后台 |
onError | 当uni-app 报错时触发 |
onUniNViewMessage | 对nvue 页面发送的数据进行监听,可参阅nvue 向 vue 通讯(opens new window)
|
onUnhandledRejection | 对未处理的 Promise 回绝事情监听函数(2.8.1+) |
onPageNotFound | 页面不存在监听函数 |
onThemeChange | 监听体系主题改变 |
页面生命周期
函数名 | 阐明 | 渠道差异阐明 | 最低版别 |
---|---|---|---|
onInit | 监听页面初始化,其参数同 onLoad 参数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad | 百度小程序 | 3.1.0+ |
onLoad | 监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参),参阅示例 | ||
onShow | 监听页面显现。页面每次出现在屏幕上都触发,包括从下级页面点回来显露当前页面 | ||
onReady | 监听页面初度烘托完结。留意假如烘托速度快,会在页面进入动画完结前触发 | ||
onHide | 监听页面躲藏 | ||
onUnload | 监听页面卸载 | ||
onResize | 监听窗口尺度改变 | App、微信小程序、快手小程序 | |
onPullDownRefresh | 监听用户下拉动作,一般用于下拉改写,参阅示例 | ||
onReachBottom | 页面滚动究竟部的事情(不是scroll-view滚究竟),常用于下拉下一页数据。详细见下方留意事项 | ||
onTabItemTap | 点击 tab 时触发,参数为Object,详细见下方留意事项 | 微信小程序、QQ小程序、支付宝小程序、百度小程序、H5、App、快手小程序、京东小程序 | |
onShareAppMessage | 用户点击右上角共享 | 微信小程序、QQ小程序、支付宝小程序、字节小程序、飞书小程序、快手小程序、京东小程序 | |
onPageScroll | 监听页面滚动,参数为Object | nvue暂不支撑 | |
onNavigationBarButtonTap | 监听原生标题栏按钮点击事情,参数为Object | App、H5 | |
onBackPress | 监听页面回来,回来 event = {from:backbutton、 navigateBack} ,backbutton 表示来历是左上角回来按钮或 android 回来键;navigateBack表示来历是 uni.navigateBack ;详细阐明及运用:onBackPress 详解 (opens new window)。支付宝小程序只要真机能触发,只能监听非navigateBack引起的回来,不可阻止默许行为。 | app、H5、支付宝小程序 | |
onNavigationBarSearchInputChanged | 监听原生标题栏查找输入框输入内容改变事情 | App、H5 | 1.6.0 |
onNavigationBarSearchInputConfirmed | 监听原生标题栏查找输入框查找事情,用户点击软键盘上的“查找”按钮时触发。 | App、H5 | 1.6.0 |
onNavigationBarSearchInputClicked | 监听原生标题栏查找输入框点击事情(pages.json 中的 searchInput 装备 disabled 为 true 时才会触发) | App、H5 | 1.6.0 |
onShareTimeline | 监听用户点击右上角转发到朋友圈 | 微信小程序 | 2.8.1+ |
onAddToFavorites | 监听用户点击右上角收藏 | 微信小程序 | 2.8.1+ |
组件生命周期
函数名 | 阐明 | 渠道差异阐明 | 最低版别 |
beforeCreate | 在实例初始化之前被调用。详见(opens new window) | ||
created | 在实例创立完结后被立即调用。详见(opens new window) | ||
beforeMount | 在挂载开端之前被调用。详见(opens new window) | ||
mounted | 挂载到实例上去之后调用。详见 (opens new window)留意:此处并不能确定子组件被悉数挂载,假如需求子组件彻底挂载之后在执行操作能够运用$nextTick Vue官方文档(opens new window)
|
||
beforeUpdate | 数据更新时调用,发生在虚拟 DOM 打补丁之前。详见(opens new window) | 仅H5渠道支撑 | |
updated | 因为数据更改导致的虚拟 DOM 从头烘托和打补丁,在这之后会调用该钩子。详见(opens new window) | 仅H5渠道支撑 | |
beforeDestroy | 实例毁掉之前调用。在这一步,实例依然彻底可用。详见(opens new window) | ||
destroyed | Vue 实例毁掉后调用。调用后,Vue 实例指示的一切东西都会解绑定,一切的事情监听器会被移除,一切的子实例也会被毁掉。详见(opens new window) |
呼应式单位 rpx
uniapp.dcloud.net.cn/tutorial/sy…
相对长度单位,功能相似于web端的 rem 和 vw,小程序首要推出,uniapp也是直接支撑。一种根据屏幕宽度自适应的动态单位。以 750 宽的屏幕为基准,750rpx 恰好为屏幕宽度。
其间uniapp做了以下设置,
- 默许的设计稿宽度为
375px
因而存在1px = 2rpx
- 默许 rpx支撑最大宽度为
960px
,超出则 按照 设计稿宽度375px
来设置
scoped
- vue开发的h5,单页面运用程序,每一个vue文件假如直接运用 class,多个文件的款式 抵触
- 微信小程序 真正 多页面运用程序 物理阻隔,页面中运用 class,不会相互影响
- uniapp做了一个设置,写vue代码,不需求主动加上
scoped
,打包成h5端的时分主动添加上去,打包成 微信小程序端 不需求添加 scoped。
uniapp 多端开发
条件编译
条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同渠道。
**写法:**以 #ifdef 或 #ifndef 加 %PLATFORM% 最初,以 #endif 结束。
- #ifdef:if defined 仅在某渠道存在
- #ifndef:if not defined 除了某渠道均存在
- %PLATFORM% :渠道称号
标签中
<!-- #ifdef %PLATFORM% -->
渠道特有的组件
<!-- #endif -->
仿制代码
js中
// #ifdef %PLATFORM%
渠道特有的API完结
// #endif
仿制代码
css中
/* #ifdef %PLATFORM% */
渠道特有款式
/* #endif */
仿制代码
条件编译写法 | 阐明 | ||
---|---|---|---|
#ifdefAPP-PLUS需条件编译的代码 #endif | 仅出现在 App 渠道下的代码 | ||
#ifndefH5需条件编译的代码 #endif | 除了 H5 渠道,其它渠道均存在的代码 | ||
#ifdefH5 | MP-WEIXIN需条件编译的代码 #endif | 在 H5 渠道或微信小程序渠道存在的代码(这儿只要 | ,不或许出现&&,因为没有交集) |
%PLATFORM% 可取值如下:
值 | 收效条件 |
---|---|
VUE3 | HBuilderX 3.2.0+详情(opens new window) |
APP-PLUS-NVUE或APP-NVUE | App nvue |
MP-WEIXIN | 微信小程序 |
MP-ALIPAY | 支付宝小程序 |
MP-BAIDU | 百度小程序 |
MP-TOUTIAO | 字节跳动小程序 |
MP-LARK | 飞书小程序 |
MP-QQ | QQ小程序 |
MP-KUAISHOU | 快手小程序 |
MP-JD | 京东小程序 |
MP-360 | 360小程序 |
MP | 微信小程序/支付宝小程序/百度小程序/字节跳动小程序/飞书小程序/QQ小程序/360小程序 |
QUICKAPP-WEBVIEW | 快运用通用(包含联盟、华为) |
QUICKAPP-WEBVIEW-UNION | 快运用联盟 |
QUICKAPP-WEBVIEW-HUAWEI | 快运用华为 |
支撑的文件
- .vue
- .js
- .css
- pages.json
- 各预编译语言文件,如:.scss、.less、.stylus、.ts、.pug
static 目录的条件编译
在不同渠道,引证的静态资源或许也存在差异,经过 static 的的条件编译能够解决此问题,static 目录下新建不同渠道的专有目录(目录称号同%PLATFORM%
值域,但字母均为小写),专有目录下的静态资源只要在特定渠道才会编译进去。
如以下目录结构,a.png
只要在微信小程序渠道才会编译进去,b.png
在一切渠道都会被编译。
┌─static
│ ├─mp-weixin
│ │ └─a.png
│ └─b.png
├─main.js
├─App.vue
├─manifest.json
└─pages.json
仿制代码
全体目录条件编译
假如想把各渠道的页面文件更彻底的分开,也能够在uni-app项目根目录创立platforms
目录,然后在下面进一步创立app-plus
、mp-weixin
等子目录,寄存不同渠道的文件。
留意
-
platforms
目录下只支撑放置页面文件(即页面vue文件),假如需求对其他资源条件编译主张运用static 目录的条件编译(opens new window)
flex布局
尽量运用flex布局,因为全渠道都支撑
尺度单位
- uniapp通用单位
px
,rpx
- vue页面中支撑
rem
、vh
、vw
- nvue 不支撑
百分比单位
css变量
CSS 变量 | 描绘 | App | 小程序 | H5 |
---|---|---|---|---|
–status-bar-height | 体系状态栏高度 | 体系状态栏高度 (opens new window)、nvue 留意见下 | 25px | 0 |
–window-top | 内容区域间隔顶部的间隔 | 0 | 0 | NavigationBar 的高度 |
–window-bottom | 内容区域间隔底部的间隔 | 0 | 0 | TabBar 的高度 |
背景图片
-
支撑 base64 格式图片。
-
支撑网络路径图片。
-
小程序不支撑在 css 中运用本地文件。需以 base64 方法方可运用。
-
运用本地路径背景图片需留意:
- 为方便开发者,在背景图片小于 40kb 时,
uni-app
编译到不支撑本地背景图的渠道时,会主动将其转化为 base64 格式; - 本地背景图片的引证路径推荐运用以
~@
最初的绝对路径。
.test2 { background-image: url('~@/static/logo.png'); } 仿制代码
- 为方便开发者,在背景图片小于 40kb 时,
uview & uni ui
uview
和uni ui
都是 和uniapp配套的全端UI结构,能够单独运用,也能够共同运用
-
uview ui 1.x
-
uview ui 2.x
-
uni ui
uview ui
因为现在 uview 2.x 版别的坑不少,因而咱们拿比较稳定的 uview 1.8.6 来演示
别的,uview ui 的引进方法分为两种,首要是取决于你的项目是怎么创立的:
- vue-cli
- HBuilderX
uview ui + vue-cli
-
装置依赖
npm i uview-ui@1.8.4 sass 仿制代码
-
在
src/main.js
文件中 大局引进 js库import uView from "uview-ui"; Vue.use(uView); 仿制代码
-
在 uni.scss 中 引进 uview 的 sass 主题库
@import "uview-ui/theme.scss"; 仿制代码
-
在 App.vue 中 引进 uview 的 sass 主题库
<style lang="scss"> @import "uview-ui/index.scss"; </style> 仿制代码
-
pages.json 中 装备 easycom
{ "easycom": { "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue" }, // 此为本身已有的内容 "pages": [ // ...... ] } 仿制代码
-
在 页面中 运用 uview的按钮
<u-button >默许按钮</u-button> <u-button type="primary">首要按钮</u-button> <u-button type="success">成功按钮</u-button> <u-button type="info">信息按钮</u-button> <u-button type="warning">正告按钮</u-button> <u-button type="error">危险按钮</u-button> 仿制代码
-
成功
uview ui + HBuilderX
-
翻开 插件市场,找到 uview 1.x 地址
-
点击导入插件
-
导入成功,能够看到目录下多了
components
文件夹 -
接着在
uni.scss
中导入 uview的主题款式文件theme.scss
@import './theme.scss'; 仿制代码
-
在页面上添加测验代码
<u-button >默许按钮</u-button> <u-button type="primary">首要按钮</u-button> <u-button type="success">成功按钮</u-button> <u-button type="info">信息按钮</u-button> <u-button type="warning">正告按钮</u-button> <u-button type="error">危险按钮</u-button> 仿制代码
-
点击运转
-
成功
uni ui
uni ui + vue-cli
-
装置相关依赖
假如
node
版别小于 16 ,sass-loader 请运用低于 @11.0.0 的版别假如
node
版别大于 16 ,sass-loader
主张运用v8.x
版别npm i sass sass-loader@10.1.1 @dcloudio/uni-ui 仿制代码
-
装备easycom
在
pages.json
中进行装备{ "easycom": { "autoscan": true, "custom": { // uni-ui 规则如下装备 "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" } }, // 其他内容 pages:[ // ... ] } 仿制代码
-
组件中运用
<uni-title title="上报统计数据"></uni-title> <uni-title type="h1" title="h1 一级标题 "></uni-title> <uni-title type="h1" title="h1 一级标题" color="#027fff"></uni-title> <uni-title type="h2" title="h2 居中" align="center"></uni-title> 仿制代码
uni ui + HBuilderX
-
翻开 uni ui 的对应的插件市场
-
运用 HBuilderX 导入插件
-
项目中会多
uni_modules
文件夹 -
页面中导入代码
<uni-title title="上报统计数据"></uni-title> <uni-title type="h1" title="h1 一级标题 "></uni-title> <uni-title type="h1" title="h1 一级标题" color="#027fff"></uni-title> <uni-title type="h2" title="h2 居中" align="center"></uni-title> 仿制代码
-
调查效果
uniapp 发布到多端
H5
一般发布
项目开发完结后,能够在 HBuilderX中来 打包成 H5项目
-
打包成H5
-
填写信息
-
此刻,生成的h5项目会放在
unpackagedistbuildh5
发布到uniapp的云环境
需求提早注册 uniCloud 的云服务
微信小程序
在HBuilderX中,想要发布微信小程序,有两种方法
一般发布
-
点击发行微信小程序
-
填写 appid
-
此刻会主动翻开 微信开发者东西,然后点击上传即可
-
然后填写 版别信息即可
-
成功后,回到微信开发者后台,翻开办理版别办理手动点击提交审核。等候审核
HBuilderX 发布
其实还能够使用 HBuilderX 直接发布,不必翻开微信开发者东西
-
首要登录你的微信开发者后台
-
翻开开发办理小程序代码上传密钥重置
-
下载小程序代码上传密钥
-
在企业开发中,记得要敞开IP白名单,下降风险
-
挑选上传密钥
-
上传成功
App
在HBuilderX中发布App的方法分为两种
- 本地离线打包
- 云打包
云打包
云打包的意思是使用 dcloud提供的能力,将你本地代码上传到 dcloud 服务器上,在云上打包完结再下载回本地。
-
翻开
mainifest.json
设置 uniapp 运用标识AppID
这个是uniapp运用的id,不是微信小程序的id -
设置 App 支撑CPU类型
App常用其他设置支撑CPU类型
-
设置运用原生隐私正则提示框
-
发行–原生App – 云打包
-
填写相关信息
-
打包成功
uniapp 其他资源
-
uniapp 常见问题汇总
-
uniapp 跨端留意事项汇总
-
运转原理以及优化主张
-
问答渠道
-
uniapp github
-
uniapp 官方团队付费支撑
-
uniapp优秀案例源码地址
- RF 微商城
- shopro商城
- Mall4j商城
- Lilishop 商城
- 有来商城
-
uniapp 官方交流QQ群