资料观看顺序(在比较中学习):
1. 什么是uniapp(https://uniapp.dcloud.io/)
2. 如何学习uniapp(https://uniapp.dcloud.io/resource)
3. 快速上手(https://uniapp.dcloud.io/quickstart)
4. 白话uni-app【html、vue、小程序的区别】(https://ask.dcloud.net.cn/article/35657)与《 微信小程序转换uni-app详细指南》
5. VUE学习笔记(一)——开发环境安装与部署项目与 VUE学习笔记(二)——目录介绍
6. 条件编译-解决各端差异(https://uniapp.dcloud.io/platform)
7.观看 《uni-app官方教程》。
8.看完uniapp官网的《 框架介绍》、《 组件概述》(先看常用的)、《 API概述》(先大体了解)、《 生命周期》、《路由( navigator 组件、 uni.navigateTo(OBJECT)API)》《 uniapp跨端开发注意》、《 案例》(包括案例页和HBuilderX中的模板项目)
9.然后就是刷几个 三方培训机构视频+Vue官网的视频。
10.现在就可以上手大部分项目了,边做项目边学完《 组件概述》、《 API概述》。
注意:uni-app
使用vue的语法+小程序的标签和API,HBuilder X创建项目中包含了大量可供学习或使用的模板框架。
一,uniapp目录结构
二,使用到的工具
HBuilderX、 微信小程序开发工具(实时调试用,初步上手阶段比浏览器好用点)、 谷歌浏览器、手机模拟器( 逍遥、 夜神、 蓝叠)。
三,.Vue文件介绍
一般包含 、
和
20
21
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
同样vue支持把资源放到外面,使用和html一样的相对路径引用(相对路径或者绝对路径)。
也支持内联样式写法:
补充:uni-app支持的css选择器
四,Vue组件的引用
创建、引用、注册、使用)。
1.创建子Vue组件(一般放在component目录中),比如上面‘三’中的样子;
比如创建了父组件Fvue.vue和子组件Cvue.vue
2.引用,在父组件中使用import的方式引用子组件(标签中),如下:
3.注册,在父组件的标签内的 data 代码块后面加上 components: { cvue }
4.使用,通过上面的步骤就可以在父组件中直接使用cvue标签了:
补充1-全局引用(就是把上面写在父组件的标签中的放到main.js中,写法还是有点不一样的):
①参照上面创建子组件
②在工程根目录的main.js中添加代码(引用、注册),如下:
③使用,在该项目任何vue组件中都可以通过
补充2-传值:
见:uniapp、Vue组件的使用-引用子组件、传值。
五,资源的那些事
template
内引入静态资源,如image
、video
等标签的src
属性时,可以使用相对路径或者绝对路径,形式如下
注意
@
开头的绝对路径以及相对路径会经过base64转换规则校验- 引入的静态资源在非h5平台,均不转为base64。
- H5平台,小于4kb的资源会被转换成base64,其余不转。
- 不支持本地图片的平台,小于40kb,一定会转base64。(共四个平台mp-weixin, mp-qq, mp-toutiao, app v2)
- App平台自
HBuilderX 2.6.9
起template
节点中引用静态资源文件时(如:图片),调整查找策略为【基于当前文件的路径搜索】,与其他平台保持一致。 - 支付宝小程序组件内 image 标签不可使用相对路径。
- js文件不支持使用
/
开头的方式引入
补充:①uni-app static目录的条件编译(专有目录下的静态资源只有在特定平台才会编译进去)
②uni-app 不同平台使用不同的Vue组件(存放适用于特定平台的Vue组件目录,也是条件编译,见uni-app判断运行的平台 )
六,生命周期
生命周期包含应用生命周期和页面生命周期、组件生命周期。
1.应用生命周期:
①onLaunch:当uni-app
初始化完成时触发(全局只触发一次)
②onShow:当 uni-app
启动,或从后台进入前台显示
③onHide:当 uni-app
从前台进入后台
④onError:当 uni-app
报错时触发
⑤onUniNViewMessage:对 nvue
页面发送的数据进行监听,可参考 nvue 向 vue 通讯
⑥onUnhandledRejection:对未处理的 Promise 拒绝事件监听函数(2.8.1+)
⑦onPageNotFound:页面不存在监听函数(页面实际上已经打开了(比如通过分享卡片、小程序码)且发现页面不存在,才会触发,api 跳转不存在的页面不会触发,如 uni.navigateTo)
⑧onThemeChange:监听系统主题变化
2.页面生命周期:
①onInit:百度小程序特有的,监听页面初始化时;
②onLoad:监听页面加载时;
③onShow:监听页面显示时;
④onReady:监听页面初次渲染完成;
⑤onHide:监听页面隐藏;
⑥onUnload:监听页面卸载;
⑦onResize:App、微信小程序监听页面尺寸变化;
⑧onPullDownRefresh:页面下拉(刷新)事件;
⑨onReachBottom:页面上滑触底事件;
⑩onTabltemTap:点击 tab 时触发的事件,微信小程序、QQ小程序、支付宝小程序、百度小程序、H5、App;
⑪onShareAppMessage:用户点击右上角分享,微信小程序、QQ小程序、支付宝小程序、字节小程序、飞书小程序、快手小程序;
⑫onPageScroll:监听页面滚动,nvue暂不支持;
⑬onNavigationBarButtonTap:监听原生标题栏按钮点击事件,App、H5;
⑭onBackPress:监听页面返回,app、H5、支付宝小程序,支付宝小程序有点特殊使用见官网文档;
⑮onNavigationBarSearchInputChanged:监听原生标题栏搜索输入框输入内容变化事件;App、H5
⑯onNavigationBarSearchInputConfirmed:监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发,App、H5
⑰onNavigationBarSearchInputClicked:监听原生标题栏搜索输入框点击事件(pages.json 中的 searchInput 配置 disabled 为 true 时才会触发),App、H5;
⑱onShareTimeline:监听用户点击右上角转发到朋友圈,微信小程序;
⑲onAddToFavorites:监听用户点击右上角收藏,微信小程序;
3.组件(控件)生命周期:
①beforeCreate:在实例化完成前
②created:在实例化完成后
③beforeMount:在挂载开始前
④mounted:在挂载完成后
⑤beforeUpdate:数据更新时的虚拟Dom渲染和打补丁之前
⑥updated:数据更新时虚拟Dom渲染和打补丁之后
⑦beforeDestroy:Vue组件示例销毁前
⑧destroyed:Vue组件示例销毁后
七,路由
1.路由跳转(看navigator和uni.navigatorTo()两种方法的介绍)
navigator、 API跳转,也可以通过在插件市场安装Vue Router插件来实现Vue Router跳转。
2.页面栈(常用的路由方法)
路由方式 |
页面栈表现 |
触发时机 |
初始化 |
新页面入栈 |
uni-app 打开的第一个页面 |
打开新页面 |
新页面入栈 |
调用 API uni.navigateTo 、使用组件 |
页面重定向 |
当前页面出栈,新页面入栈 |
调用 API uni.redirectTo 、使用组件 |
页面返回 |
页面不断出栈,直到目标返回页 |
调用 API uni.navigateBack 、使用组件 |
Tab 切换 |
页面全部出栈,只留下新的 Tab 页面 |
调用 API uni.switchTab 、使用组件 |
重加载 |
页面全部出栈,只留下新的页面 |
调用 API uni.reLaunch 、使用组件 |
八、条件编译
见:uni-app开发环境和生产环境的判断
九、判断运行平台
见:uni-app判断运行的平台
十,页面样式与布局
1.全局css样式:
定义在 App.vue 中的样式为全局样式,作用于每个页面,各个页面可重写该样式对其覆盖。
注:nvue页面暂不支持全局样式
2.uni-app的内置CSS变量(状态栏、导航栏、底部选项卡的一些样式改变用到的变量)
CSS变量 |
描述 |
App |
小程序 |
H5 |
--status-bar-height |
系统状态栏高度 |
系统状态栏高度、nvue注意见下 |
25px |
0 |
--window-top |
内容区域距离顶部的距离 |
0 |
0 |
NavigationBar 的高度 |
--window-bottom |
内容区域距离底部的距离 |
0 |
0 |
TabBar 的高度 |
①注意:
var(--status-bar-height)
此变量在微信小程序环境为固定25px
,在 App 里为手机实际状态栏高度。- 当设置
"navigationStyle":"custom"
取消原生导航栏后,由于窗体为沉浸式,占据了状态栏位置。此时可以使用一个高度为var(--status-bar-height)
的 view 放在页面顶部,避免页面内容出现在状态栏。 - 由于在H5端,不存在原生导航栏和tabbar,也是前端div模拟。如果设置了一个固定位置的居底view,在小程序和App端是在tabbar上方,但在H5端会与tabbar重叠。此时可使用
--window-bottom
,不管在哪个端,都是固定在tabbar上方。 - 目前 nvue 在App端,还不支持
--status-bar-height
变量,替代方案是在页面onLoad时通过uni.getSystemInfoSync().statusBarHeight获取状态栏高度,然后通过style绑定方式给占位view设定高度。
②下面是提供的示例代码
快速书写css变量的方法是:在css中敲hei,在候选助手中即可看到3个css变量。(HBuilderX 1.9.6以上支持)
示例1 - 普通页面使用css变量:
示例2 - nvue页面获取状态栏高度:
uni-app
中以下组件的高度是固定的,不可修改:
组件 |
描述 |
App |
H5 |
NavigationBar |
导航栏 |
44px |
44px |
TabBar |
底部选项卡 |
HBuilderX 2.3.4之前为56px,2.3.4起和H5调为一致,统一为 50px。但可以自主更改高度) |
50px |
各小程序平台,包括同小程序平台的iOS和Android的高度也不一样。
3.字体图标:
- 支持 base64 格式字体图标。
- 支持网络路径字体图标。
- 小程序不支持在css中使用本地文件,包括本地的背景图和字体文件。需以base64方式方可使用。
- 网络路径必须加协议头
https
。 - 从 http://www.iconfont.cn 上拷贝的代码,默认是没加协议头的。
- 从 http://www.iconfont.cn 上下载的字体文件,都是同名字体(字体名都叫iconfont,安装字体文件时可以看到),在nvue内使用时需要注意,此字体名重复可能会显示不正常,可以使用工具修改。
- 使用本地路径图标字体需注意:
- 为方便开发者,在字体文件小于 40kb 时,
uni-app
会自动将其转化为 base64 格式; - 字体文件大于等于 40kb,仍转换为 base64 方式使用的话可能有性能问题,如开发者必须使用,则需自己将其转换为 base64 格式使用,或将其挪到服务器上,从网络地址引用;
- 字体文件的引用路径推荐使用以 ~@ 开头的绝对路径。
①nvue
中不可直接使用css的方式引入字体文件,需要使用以下方式在js内引入。nvue内不支持本地路径引入字体,请使用网络链接或者base64
形式。src
字段的url
的括号内一定要使用单引号。
②使用示例:
4.补充:
①Flexbox用法: Flexbox——uni-app, 还有Flex布局教程——阮一峰。
②uniapp的upx与px、rpx的区别
十一、页面渲染控制——template
和 block
template示例:
block示例
注:
在不同的平台表现存在一定差异,推荐统一使用
引用:该文章为本人的学习笔记,可供大家学习参考,与uni-app官网教程如有出入请以官方教程为主。uniapp是一个很好的前端框架,学习成本不高值得大家学习(uniapp、小程序、uView等好多框架都是在Vue基础上演变的,学好一门+Vue语法,再去学其他的就简单了。)
作者:꧁执笔小白꧂