Uni-app框架(小程序开发)
第一次使用,需要配置开发工具的相关路径。点击工具栏的运行 -> 运行到小程序模拟器 -> 运行设置,配置相应小程序开发者工具的路径。
在HbuilderX打开已有项目,点击运行->运行到小程序模拟器-微信开发者工具,可以同步更新
支持通过npm安装第三方包
3.1、创建uni-app
在点击工具栏里的文件 -> 新建 -> 项目:
选择uni-app类型,输入工程名,选择模板,点击创建,即可成功创建。
3.2、运行uni-app
此处只针对微信小程序开发,点击运行->运行到小程序模拟器-微信开发者工具
3.3、打包uni-app
此处只针对微信小程序发布
┌─components uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─hybrid 存放本地网页的目录,
详见
├─pages 业务页面文件存放的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─wxcomponents 存放小程序组件的目录,
详见
├─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置App全局样式以及监听
应用生命周期
├─manifest.json 配置应用名称、appid、logo、版本等打包信息,
详见
└─pages.json 配置页面路由、导航条、选项卡等页面类信息,
详见
为了实现多端兼容,综合考虑编译速度,运行性能等因素,uni-app 约定了如下开发规范:
为兼容多端运行,建议使用 flex 布局进行开发
.vue
文件是一个自定义的文件类型,用类 HTML 语法描述一个 Vue 组件。每个 .vue
文件包含三种类型的顶级语言块 、
和
,还允许添加可选的自定义块:
注意必须有一个view,且只能有一个根view。所有内容写在这个view下面。
每个.vue
文件最多包含一个块。
内最多包含一个
标签
每个.vue
文件最多包含一个块。
一个.vue
文件可以包含多个标签
任何匹配
.css
文件 (或通过它的lang
特性指定的扩展名) 的 webpack 规则都将会运用到这个块的内容中
4.2.2 组件标签靠近小程序规范,详见 uni-app 组件规范
不能直接使用html中的img,你应该使用uniapp的组件标签image 设计稿 1px / 设计稿基准宽度 = 框架样式 1rpx / 750rpx 750 * 元素在设计稿中的宽度 / 设计稿基准宽度 tabbar 的页面展现过一次后就保留在内存中,再次切换 tabbar 页面,只会触发每个页面的onShow,不会再触发onLoad; 代码跳转到 tabbar 页面,api只能使用uni.switchTab (opens new window),不能使用uni.navigateTo、uni.redirectTo; subPackages 分包加载配置,此配置为小程序的分包加载机制。 微信小程序每个分包的大小是2M,总体积一共不能超过20M。 主包放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本 v-on 指令,它用于监听 DOM 事件。v-on缩写为‘ @ ’,下文简称为 @事件 事件映射表 只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。 onPullDownRefresh 框架以栈的形式管理当前所有页面,当发生路由切换的时候,页面栈的表现如下: 可滚动视图区域。用于区域滚动。 注意 报错:this.echarts.setCanvasCreator is not a function 的解决办法 还有uni api 有变动 echarts.vue 中有两处需要修改 echarts.vue完整代码如下 缺点:功能相对echarts较少 优点:体量小,加载快
标签在uniapp中的含义与标准html中的
标签的属性是变量时,属性前面需增加:
冒号前缀,属性值仍使用引号包裹,但引号里不是字符串,而是js。4.2.3 互连能力(JS API)靠近微信小程序规范
4.2.4 css样式规范
uni-app
支持的通用 css 单位包括 px、rpx
五、页面与page.json
pages
pages.json
中配置pages
列表;未在pages.json -> pages
中配置的页面,uni-app
会在编译阶段进行忽略;.vue
文件;删除pages.json -> pages
列表项中的配置;uni-app
会将pages.json -> pages
配置项中的第一个页面,作为当前工程的首页(启动页)。tabBar
六、vue语法
插值
指令
v-bind
v-on
v-once
v-html
v-html
,微信小程序会被转为 rich-text
,其他端不支持 v-html
。条件渲染
v-if和v-else
v-if
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy
值的时候被渲染。 使用 v-else
指令来表示 v-if 的“else 块”。
v-show
v-show
是一个根据条件展示元素选项的指令 。用法大致和 v-if
一样
不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的
CSS
属性的 display
列表渲染
在 v-for 里使用数组
v-for
指令需要使用 item in list
形式的特殊语法,其中 list
是源数据数组,而 item
则是被迭代的数组元素的别名。
item
则是被迭代的数组元素的别名。index
,是可选的。在 v-for 里使用对象
value
是被迭代的对象元素的属性值。property
名称 (也就是键名)。
七、生命周期
5.1、页面生命周期
函数名
说明
平台差异说明
onLoad
监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参),参考示例
onShow
监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady
监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
onHide
监听页面隐藏
onUnload
监听页面卸载
onResize
监听窗口尺寸变化
App、微信小程序、快手小程序
onPullDownRefresh
监听用户下拉动作,一般用于下拉刷新,参考示例
onReachBottom
页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap
点击 tab 时触发,参数为Object,具体见下方注意事项
微信小程序、QQ小程序、支付宝小程序、百度小程序、H5、App、快手小程序、京东小程序
onShareAppMessage
用户点击右上角分享
微信小程序、QQ小程序、支付宝小程序、字节小程序、飞书小程序、快手小程序、京东小程序
onPageScroll
监听页面滚动,参数为Object
nvue暂不支持
onShareTimeline
监听用户点击右上角转发到朋友圈
微信小程序
onAddToFavorites
监听用户点击右上角收藏
微信小程序
pages.json
里,找到的当前页面的pages节点,并在 style
选项中开启 enablePullDownRefresh
。uni.startPullDownRefresh
uni.stopPullDownRefresh
可以停止当前页面的下拉刷新。5.2、组件生命周期
函数名
说明
onLaunch
当uni-app初始化完成时触发(局部只触发一次)
onOpen
当uni-app启动,或从后台进入前台显示
onHide
当uni-app从前台进入后台
onError
当uni-app报错时触发
onUniNViewMessage
对nvue页面发送的数据进行监听,可参考 nvue 向 vue 通讯
onUnhandledRejection
对未处理的 Promise 拒绝事件监听函数(2.8.1+)
onPageNotFound
页面不存在监听函数
onThemeChange
监听系统主题变化
八、路由
页面栈
路由方式
页面栈表现
触发时机
初始化
新页面入栈
uni-app:的第一个页面
:新页面
新页面入栈
调用API uni.navigateTo ,使用组件
页面重启
当前页面出栈,新页面入栈
调用API uni.redirectTo ,使用组件
页面返回
页面不断出栈,直到目标返回页
调用API uni.navigateBack ,使用组件
标签切换
页面全部出栈,只留下新的标签页面
调用API uni.switchTab ,使用组件
重加载
页面全部出栈,只留下新的页面
调用API uni.reLaunch ,使用组件
九、组件
scroll-view
性名
类型
默认值
说明
scroll-x
Boolean
FALSE
允许横向滚动
scroll-y
Boolean
FALSE
允许纵向滚动
scroll-top
Number/String
设置竖向滚动条位置
scroll-left
Number/String
设置横向滚动条位置
scroll-into-view
String
值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素
show-scrollbar
Boolean
FALSE
控制是否出现滚动条
refresher-enabled
Boolean
FALSE
开启自定义下拉刷新
refresher-threshold
Number
45
设置自定义下拉刷新阈值
refresher-default-style
String
"black"
设置自定义下拉刷新默认样式,支持设置 black,white,none,none 表示不使用默认样式
refresher-background
String
"#FFF"
设置自定义下拉刷新区域背景颜色
refresher-triggered
Boolean
FALSE
设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发
enable-flex
Boolean
FALSE
启用 flexbox 布局。开启后,当前节点声明了 display: flex 就会成为 flex container,并作用于其孩子节点。
scroll-anchoring
Boolean
FALSE
开启 scroll anchoring 特性,即控制滚动位置不随内容变化而抖动,仅在 iOS 下生效,安卓下可参考 CSS overflow-anchor 属性。
@scrolltoupper
EventHandle
滚动到顶部/左边,会触发 scrolltoupper 事件
@scrolltolower
EventHandle
滚动到底部/右边,会触发 scrolltolower 事件
@scroll
EventHandle
滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}
@refresherpulling
EventHandle
自定义下拉刷新控件被下拉
@refresherrefresh
EventHandle
自定义下拉刷新被触发
@refresherrestore
EventHandle
自定义下拉刷新被复位
@refresherabort
EventHandle
自定义下拉刷新被中止
map
地图服务商说明
地图服务商
App
H5
微信小程序
高德
√
Goolge
3.4+
3.2.10+
腾讯
√
√
组件的宽/高推荐写直接量,比如:750rpx,不要设置百分比值。
wgs84
坐标,其他地图使用 gcj02
坐标,用错坐标类型会显示偏移//判断是否在多边形内
windingNumber(p, poly) {
var px = p.latitude,
py = p.longitude,
sum = 0
for (var i = 0, l = poly.length, j = l - 1; i < l; j = i, i++) {
var sx = poly[i].latitude,
sy = poly[i].longitude,
tx = poly[j].latitude,
ty = poly[j].longitude
// 点与多边形顶点重合或在多边形的边上
if ((sx - px) * (px - tx) >= 0 && (sy - py) * (py - ty) >= 0 && (px - sx) * (ty - sy) === (py - sy) * (
tx - sx)) {
return 'on'
}
// 点与相邻顶点连线的夹角
var angle = Math.atan2(sy - py, sx - px) - Math.atan2(ty - py, tx - px)
// 确保夹角不超出取值范围(-π 到 π)
if (angle >= Math.PI) {
angle = angle - Math.PI * 2
} else if (angle <= -Math.PI) {
angle = angle + Math.PI * 2
}
sum += angle
}
// 计算回转数并判断点和多边形的几何关系
return Math.round(sum / Math.PI) === 0 ? 'out' : 'in'
}
chart图表
echarts引入
常见错误
这个错误是由于 prors不能传递方法(之前是可以的,不知道是平台的差异还是版本的差异);
解决办法 将echarts.js 直接导入到echarts.vue 中.
createCanvasContext() 第二个参数传入当前组建 即this,
createSelectorQuery() 后面加上调用 in(this).
u-charts引入