转载于: https://www.jianshu.com/p/132a3de98238
uni-app跨平台框架官方教程
链接:https://ke.qq.com/course/343370
一、框架简介基础知识点
uniapp生命周期
onLaunch 当uniapp初始化完成时进行触发,全局只触发一次
onShow 当uniapp启动或者从后台进入前台显示
onHide 当uniapp从前台进入后台
onUniNViewMessage 对nvue页面发送数据进行监听
uniapp页面生命周期
https://uniapp.dcloud.io/frame
参看文档
路由
uni-app有两种路由跳转方式:使用navigator组件跳转、调用API跳转。
1.打开新页面,页面重定向===》 调用 API uni.navigateTo 、使用组件
2.页面返回 调用 APIuni.navigateBack、使用组件
3.Tab 切换 调用 APIuni.switchTab、使用组件
4.重加载 调用 APIuni.reLaunch、使用组件
Tips:
navigateTo,redirectTo只能打开非 tabBar 页面。
switchTab只能打开tabBar页面。
reLaunch可以打开任意页面。
页面底部的tabBar由页面决定,即只要是定义为tabBar的页面,底部都有tabBar。
不能在App.vue里面进行页面跳转。
页面样式与布局
uni-app支持的通用css单位包括px、upx、vh。
upx 是相对于基准宽度的单位,可以根据屏幕宽度进行自适应。uni-app 规定屏幕基准宽度750upx。
upx2px
因为upx是编译器处理的,动态绑定upx不生效
可使用 uni.upx2px(Number) 转换为 px 后再赋值。
例如
returnuni.upx2px(750/2)+'px';
样式导入
使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束。
@import"../../common/uni.css";
内联样式
1.style:静态的样式统一写到 class 中。
class:用于指定样式规则,其属性值是样式规则中类选择器名(样式类名)的集合,样式类名不需要带上.,样式类名之间用空格分隔。
选择器
1 .class
2 #id
3 element 选择所有 view 组件
全局样式与局部样式
定义在 App.vue 中的样式为全局样式,作用于每一个页面。在 pages 目录下 的 vue 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 App.vue 中相同的选择器。
注意: App.vue 中通过 @import 语句可以导入外联样式,一样作用于每一个页面。
CSS变量
CSS变量描述5+App小程序H5
--status-bar-height系统状态栏高度系统状态栏高度25px0
--window-top内容区域距离顶部的距离00NavigationBar 的高度
--window-bottom内容区域距离底部的距离00TabBar 的高度
固定值
uni-app中以下组件的高度是固定的,不可修改:
组件描述5+AppH5
NavigationBar导航栏44px44px
TabBar底部选项卡56px50px
Flex布局
为支持跨平台,框架建议使用Flex布局
背景图片
uni-app支持使用在 css 里设置背景图片,使用方式与普通web项目相同,需要注意以下几点:
支持 base64 格式图片。
支持网络路径图片。
使用本地路径背景图片需注意:
图片小于 40kb,uni-app会自动将其转化为 base64 格式;
图片大于等于 40kb, 需开发者自己将其转换为base64格式使用,或将其挪到服务器上,从网络地址引用。
本地背景图片的引用路径仅支持以 ~@ 开头的绝对路径(不支持相对路径)。
.test2{background-image:url('~@/static/logo.png');}
字体图标
uni-app支持使用字体图标,使用方式与普通web项目相同,需要注意以下几点:
支持 base64 格式字体图标。
支持网络路径字体图标。
网络路径必须加协议头https。
从http://www.iconfont.cn上拷贝的代码,默认是没加协议头的。
uni-app本地路径图标字体支持情况:
字体文件小于 40kb,uni-app会自动将其转化为 base64 格式;
字体文件大于等于 40kb, 需开发者自己转换,否则使用将不生效;
字体文件的引用路径仅支持以 ~@ 开头的绝对路径(不支持相对路径)。
@font-face{font-family:test1-icon;src:url('~@/static/iconfont.ttf');}
和
uni-app支持在 template 模板中嵌套和
和
代码示例
ES6 支持
uni-app 在支持绝大部分 ES6 API 的同时,也支持了 ES7 的 await/async。
NPM支持
uni-app支持使用npm安装第三方包。
TypeScript 支持
在 uni-app 中使用 ts 开发
小程序组件支持
uni-app支持在 5+App 和小程序中使用小程序组件。
平台差异说明
平台支持情况小程序组件存放目录
H5不支持
5+App支持微信小程序组件wxcomponents
微信小程序支持微信小程序组件wxcomponents
支付宝小程序支持支付宝小程序组件mycomponents
百度小程序支持百度小程序组件swancomponents
二、vue使用注意事项
uni-app 在发布到H5时支持所有vue的语法;发布到App和小程序时,由于平台限制,无法实现全部vue语法,但uni-app仍是是对vue语法支持度最高的跨端框架。本文将详细讲解差异。
生命周期
uni-app完整支持Vue实例的生命周期,同时还新增应用生命周期及页面生命周期。
详见Vue官方文档:生命周期钩子。
注意
不要在选项属性或回调上使用箭头函数,比如created: () => console.log(this.a)或vm.$watch('a', newValue => this.myMethod())。因为箭头函数是和父级上下文绑定在一起的,this不会是如你做预期的Vue实例,且this.a或this.myMethod也会是未定义的。
建议使用uni-app的onReady代替vue的mounted。
建议使用uni-app的onLoad代替vue的created。
模板语法
uni-app完整支持Vue模板语法。
详见Vue官方文档:模板语法。
注意如果使用老版的非自定义组件模式,即manifest中"usingComponents":false,部分模版语法不支持,但此模式已不再推荐使用,详见。
老版非自定义组件模式不支持情况:
不支持纯 HTML
不支持部分复杂的 JavaScript 渲染表达式
不支持过滤器
data 属性
data必须声明为返回一个初始数据对象的函数;否则页面关闭时,数据不会自动销毁,再次打开该页面时,会显示上次数据。
//正确用法,使用函数返回对象data(){return{title:'Hello'}}//错误写法,会导致再次打开页面时,显示上次数据data:{title:'Hello'}
全局变量
实现全局变量的方式需要遵循 Vue 单文件模式的开发规范。详细参考:uni-app全局变量的几种实现方式
lass 支持的语法:
style 支持的语法:
非H5端不支持Vue官方文档:Class 与 Style 绑定中的classObject和styleObject语法。
不支持示例:
注意:以:style=""这样的方式设置px像素值,其值为实际像素,不会被编译器转换。
此外还可以用computed方法生成class或者style字符串,插入到页面中,举例说明:
用在组件上
非H5端暂不支持在自定义组件上使用Class与Style绑定
计算属性
完整支持Vue官方文档:计算属性。
条件渲染
完整支持Vue官方文档:条件渲染
列表渲染
完整vue列表渲染Vue官方文档:列表渲染
key
如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如中的输入内容,
:key的值以两种形式提供
使用v-for循环array中item的某个property,该property的值需要是列表中唯一的字符串或数字,且不能动态改变。
使用v-for循环中item本身,这时需要item本身是一个唯一的字符串或者数字
当数据改变触发渲染层重新渲染的时候,会校正带有key的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。
如不提供:key,会报一个warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。
注意:
事件映射表中没有的原生事件也可以使用,例如map组件的regionchange 事件直接在组件上写成 @regionchange,同时这个事件也非常特殊,它的 event type 有 begin 和 end 两个,导致我们无法在handleProxy 中区分到底是什么事件,所以你在监听此类事件的时候同时监听事件名和事件类型既 。
为兼容各端,事件需使用 v-on 或 @ 的方式绑定,请勿使用小程序端的bind 和 catch 进行事件绑定。
事件修饰符
.stop:各平台均支持, 使用时会阻止事件冒泡,在非 H5 端同时也会阻止事件的默认行为
.prevent 仅在 H5 平台支持
.self:仅在 H5 平台支持
.once:仅在 H5 平台支持
.capture:仅在 H5 平台支持
.passive:仅在 H5 平台支持
若需要禁止蒙版下的页面滚动,可使用 @touchmove.stop.prevent="moveHandle",moveHandle 可以用来处理 touchmove 的事件,也可以是一个空函数。
按键修饰符:uni-app运行在手机端,没有键盘事件,所以不支持按键修饰符。
表单控件绑定
支持Vue官方文档:表单控件绑定。
建议开发过程中直接使用uni-app:表单组件。
组件
Vue 组件
组件是整个Vue.js中最复杂的部分,支持Vue官方文档:组件。
有且只能使用单文件组件(.vue 组件)的形式进行支持。其他的诸如:动态组件,自定义render,和