目录
uniapp介绍
uni-app
是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。uni-app组成和跨端原理
uni-app组成和跨端原理
基本语言和开发规范
uni-app代码编写,基本语言包括js、vue、css。以及ts、scss等css预编译器。
在app端,还支持原生渲染的nvue,以及可以编译为kotlin和swift的uts。
DCloud还提供了使用js编写服务器代码的uniCloud云引擎。所以只需掌握js,你可以开发web、Android、iOS、各家小程序以及服务器等全栈应用。
为了实现多端兼容,综合考虑编译速度、运行性能等因素,uni-app
约定了如下开发规范:
- 页面文件遵循 Vue 单文件组件 (SFC) 规范,即每个页面是一个.vue文件
- 组件标签靠近小程序规范,详见uni-app 组件规范
- 接口能力(JS API)靠近小程序规范,但需将前缀
wx
、my
等替换为uni
,详见uni-app接口规范 - 数据绑定及事件处理同
Vue.js
规范,同时补充了应用生命周期及页面的生命周期 - 如需兼容app-nvue平台,建议使用flex布局进行开发
uni-app分编译器
和运行时(runtime)
。uni-app能实现一套代码、多端运行,是通过这2部分配合完成的。
编译器将开发者的代码进行编译,编译的输出物由各个终端的runtime进行解析,每个平台(Web、Android App、iOS App、各家小程序)都有各自的runtime。
什么是编译器
uni-app
能实现一套代码、多端运行,核心是通过编译器 + 运行时
实现的:
- 编译器:将
uni-app
统一代码编译生成每个平台支持的特有代码;如在小程序平台,编译器将.vue
文件拆分生成wxml
、wxss
、js
等代码。 - 运行时:动态处理数据绑定、事件代理,保证Vue和平台宿主数据的一致性;
uni-app
项目根据所依赖的Vue
版本不同,编译器的实现也不同:
- vue2:
uni-app
编译器基于wepback实现 - vue3:
uni-app
编译器基于Vite实现,编译速度更快,详见:vue3和vite双向加持,uni-app性能再次提升
uni-app
项目根据创建方式的不同,编译器在使用上也有差异:
cli
方式创建的项目,编译器安装在项目下。编译器不会跟随HBuilderX
升级。如需升级编译器,可以参考:更新依赖到指定版本。HBuilderX
可视化界面创建的项目,编译器在HBuilderX
的安装目录下的plugin
目录,随着HBuilderX
的升级会自动升级编译器。- 已经使用
cli
创建的项目,如果想继续在HBuilderX
里使用,可以把工程拖到HBuilderX
中。注意如果是把整个项目拖入HBuilderX
,则编译时走的是项目下的编译器。如果是把src目录拖入到HBuilderX
中,则走的是HBuilderX
安装目录下plugin
目录下的编译器。
pages.json 页面路由
pages.json
文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。
它类似微信小程序中app.json
的页面管理部分。注意定位权限申请等原属于app.json
的内容,在uni-app中是在manifest中配置。
配置项列表
属性 | 类型 | 必填 | 描述 | 平台兼容 |
---|---|---|---|---|
globalStyle | Object | 否 | 设置默认页面的窗口表现 | |
pages | Object Array | 是 | 设置页面路径及窗口表现 | |
easycom | Object | 否 | 组件自动引入规则 | 2.5.5+ |
tabBar | Object | 否 | 设置底部 tab 的表现 | |
condition | Object | 否 | 启动模式配置 | |
subPackages | Object Array | 否 | 分包加载配置 | |
preloadRule | Object | 否 | 分包预下载规则 | 微信小程序 |
workers | String | 否 | Worker 代码放置的目录 | 微信小程序 |
leftWindow | Object | 否 | 大屏左侧窗口 | H5 |
topWindow | Object | 否 | 大屏顶部窗口 | H5 |
rightWindow | Object | 否 | 大屏右侧窗口 | H5 |
uniIdRouter | Object | 否 | 自动跳转相关配置,新增于HBuilderX 3.5.0 | |
entryPagePath | String | 否 | 默认启动首页,新增于HBuilderX 3.7.0 | 微信小程序、支付宝小程序 |
{
"pages": [{
"path": "pages/component/index",
"style": {
"navigationBarTitleText": "组件"
}
}, {
"path": "pages/API/index",
"style": {
"navigationBarTitleText": "接口"
}
}, {
"path": "pages/component/view/index",
"style": {
"navigationBarTitleText": "view"
}
}],
"condition": { //模式配置,仅开发期间生效
"current": 0, //当前激活的模式(list 的索引项)
"list": [{
"name": "test", //模式名称
"path": "pages/component/view/index" //启动页面,必选
}]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "演示",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8",
"usingComponents":{
"collapse-tree-item":"/components/collapse-tree-item"
},
"renderingMode": "seperated", // 仅微信小程序,webrtc 无法正常时尝试强制关闭同层渲染
"pageOrientation": "portrait", //横屏配置,全局屏幕旋转设置(仅 APP/微信/QQ小程序),支持 auto / portrait / landscape
"rpxCalcMaxDeviceWidth": 960,
"rpxCalcBaseDeviceWidth": 375,
"rpxCalcIncludeWidth": 750
},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"height": "50px",
"fontSize": "10px",
"iconWidth": "24px",
"spacing": "3px",
"iconfontSrc":"static/iconfont.ttf", // app tabbar 字体.ttf文件路径 app 3.4.4+
"list": [{
"pagePath": "pages/component/index",
"iconPath": "static/image/icon_component.png",
"selectedIconPath": "static/image/icon_component_HL.png",
"text": "组件",
"iconfont": { // 优先级高于 iconPath,该属性依赖 tabbar 根节点的 iconfontSrc
"text": "\ue102",
"selectedText": "\ue103",
"fontSize": "17px",
"color": "#000000",
"selectedColor": "#0000ff"
}
}, {
"pagePath": "pages/API/index",
"iconPath": "static/image/icon_API.png",
"selectedIconPath": "static/image/icon_API_HL.png",
"text": "接口"
}],
"midButton": {
"width": "80px",
"height": "50px",
"text": "文字",
"iconPath": "static/image/midButton_iconPath.png",
"iconWidth": "24px",
"backgroundImage": "static/image/midButton_backgroundImage.png"
}
},
"easycom": {
"autoscan": true, //是否自动扫描组件
"custom": {//自定义扫描规则
"^uni-(.*)": "@/components/uni-$1.vue"
}
},
"topWindow": {
"path": "responsive/top-window.vue",
"style": {
"height": "44px"
}
},
"leftWindow": {
"path": "responsive/left-window.vue",
"style": {
"width": "300px"
}
},
"rightWindow": {
"path": "responsive/right-window.vue",
"style": {
"width": "300px"
},
"matchMedia": {
"minWidth": 768
}
}
}
globalStyle
用于设置应用的状态栏、导航条、标题、窗口背景色等。
属性 | 类型 | 默认值 | 描述 | 平台差异说明 |
---|---|---|---|---|
navigationBarBackgroundColor | HexColor | #F8F8F8 | 导航栏背景颜色(同状态栏背景色) | APP与H5为#F8F8F8,小程序平台请参考相应小程序文档 |
navigationBarTextStyle | String | black | 导航栏标题颜色及状态栏前景颜色,仅支持 black/white | 支付宝小程序不支持,请使用 my.setNavigationBar |
navigationBarTitleText | String | 导航栏标题文字内容 | ||
navigationStyle | String | default | 导航栏样式,仅支持 default/custom。custom即取消默认的原生导航栏,需看使用注意 | 微信小程序 7.0+、百度小程序、H5、App(2.0.3+) |
backgroundColor | HexColor | #ffffff | 下拉显示出来的窗口的背景色 | 微信小程序 |
backgroundTextStyle | String | dark | 下拉 loading 的样式,仅支持 dark / light | 微信小程序 |
enablePullDownRefresh | Boolean | false | 是否开启下拉刷新,详见页面生命周期。 | |
onReachBottomDistance | Number | 50 | 页面上拉触底事件触发时距页面底部距离,单位只支持px,详见页面生命周期 | |
backgroundColorTop | HexColor | #ffffff | 顶部窗口的背景色(bounce回弹区域) | 仅 iOS 平台 |
backgroundColorBottom | HexColor | #ffffff | 底部窗口的背景色(bounce回弹区域) | 仅 iOS 平台 |
titleImage | String | 导航栏图片地址(替换当前文字标题),支付宝小程序内必须使用https的图片链接地址 | 支付宝小程序、H5、APP | |
transparentTitle | String | none | 导航栏整体(前景、背景)透明设置。支持 always 一直透明 / auto 滑动自适应 / none 不透明 | 支付宝小程序、H5、APP |
titlePenetrate | String | NO | 导航栏点击穿透 | 支付宝小程序、H5 |
pageOrientation | String | portrait | 横屏配置,屏幕旋转设置,仅支持 auto / portrait / landscape 详见 响应显示区域变化 | App 2.4.7+、微信小程序、QQ小程序 |
animationType | String | pop-in | 窗口显示的动画效果,详见:窗口动画 | App |
animationDuration | Number | 300 | 窗口显示动画的持续时间,单位为 ms | App |
app-plus | Object | 设置编译到 App 平台的特定样式,配置项参考下方 app-plus | App | |
h5 | Object | 设置编译到 H5 平台的特定样式,配置项参考下方 H5 | H5 | |
mp-alipay | Object | 设置编译到 mp-alipay 平台的特定样式,配置项参考下方 MP-ALIPAY | 支付宝小程序 | |
mp-weixin | Object | 设置编译到 mp-weixin 平台的特定样式,配置项参考下方 MP-WEIXIN | 微信小程序 | |
mp-baidu | Object | 设置编译到 mp-baidu 平台的特定样式,配置项参考下方 MP-BAIDU | 百度小程序 | |
mp-toutiao | Object | 设置编译到 mp-toutiao 平台的特定样式 | 抖音小程序 | |
mp-lark | Object | 设置编译到 mp-lark 平台的特定样式 | 飞书小程序 | |
mp-qq | Object | 设置编译到 mp-qq 平台的特定样式 | QQ小程序 | |
mp-kuaishou | Object | 设置编译到 mp-kuaishou 平台的特定样式 | 快手小程序 | |
mp-jd | Object | 设置编译到 mp-jd 平台的特定样式 | 京东小程序 | |
usingComponents | Object | 引用小程序组件,参考 小程序组件 | ||
renderingMode | String | 同层渲染,webrtc(实时音视频) 无法正常时尝试配置 seperated 强制关掉同层 | 微信小程序 | |
leftWindow | Boolean | true | 当存在 leftWindow 时,默认是否显示 leftWindow | H5 |
topWindow | Boolean | true | 当存在 topWindow 时,默认是否显示 topWindow | H5 |
rightWindow | Boolean | true | 当存在 rightWindow 时,默认是否显示 rightWindow | H5 |
rpxCalcMaxDeviceWidth | Number | 960 | rpx 计算所支持的最大设备宽度,单位 px | App(vue2 且不含 nvue)、H5(2.8.12+) |
rpxCalcBaseDeviceWidth | Number | 375 | rpx 计算使用的基准设备宽度,设备实际宽度超出 rpx 计算所支持的最大设备宽度时将按基准宽度计算,单位 px | App(vue2 且不含 nvue)、H5(2.8.12+) |
rpxCalcIncludeWidth | Number | 750 | rpx 计算特殊处理的值,始终按实际的设备宽度计算,单位 rpx | App(vue2 且不含 nvue)、H5(2.8.12+) |
dynamicRpx | Boolean | false | 动态 rpx,屏幕大小变化会重新渲染 rpx | App-nvue(vue3 固定值为 true) 3.2.13+ |
maxWidth | Number | 单位px,当浏览器可见区域宽度大于maxWidth时,两侧留白,当小于等于maxWidth时,页面铺满;不同页面支持配置不同的maxWidth;maxWidth = leftWindow(可选)+page(页面主体)+rightWindow(可选) | H5(2.9.9+) |
注意
每个组件,包括如下几个部分:以组件名称为标记的开始标签和结束标签、组件内容、组件属性、组件属性值。
注意:所有组件与属性名都是小写,单词之间以连字符
-
连接。
<component-name property1="value" property2="value">
content
</component-name>
复制代码
下面是一个基本组件的实例,在一个vue页面的根<view>
组件下插入一个<button>
组件。给这个组件的内容区写上文字“按钮”,同时给这个组件设置了一个属性“size”,并且“size”属性的值设为了“mini”。
注:按照vue单文件组件规范,每个vue文件的根节点必须为
<template>
,且这个<template>
下只能且必须有一个根<view>
组件。
<template>
<view>
<button size="mini">按钮</button>
</view>
</template>
复制代码
通过了解button组件的文档,我们知道上述代码将在页面中绘制一个按钮,按钮显示的文字是“按钮”,按钮的大小是小尺寸的。
#组件的属性类型
组件的属性,有多种类型:
类型 | 描述 | 注解 |
---|---|---|
Boolean | 布尔值 | 组件写上该属性,不管该属性等于什么,其值都为 true ,只有组件上没有写该属性时,属性值才为 false 。如果属性值为变量,变量的值会被转换为 Boolean 类型。 |
Number | 数字 | 1, 2.5 |
String | 字符串 | "string" |
Array | 数组 | [ 1, "string" ] |
Object | 对象 | { key: value } |
EventHandler | 事件处理函数名 | handlerName 是 methods 中定义的事件处理函数名 |
Any | 任意属性 |
下面的例子演示了组件的属性设置boolean值和数字的例子。注意false
作为一个js变量,在组件的属性中使用时,属性前面需增加:
冒号前缀,属性值仍使用引号包裹,但引号里不是字符串,而是js。
<template>
<view>
<button size="mini" :disabled="false" hover-start-time=20 >按钮</button>
</view>
</template>
复制代码
#公共属性列表
每个组件都有各自定义的属性,但所有uni-app的组件,都有如下属性:
属性名 | 类型 | 描述 | 注解 |
---|---|---|---|
id | String | 组件的唯一标示 | 一般用于获取组件上下文对象(如:VideoContext),需要保持整个页面唯一 |
ref | String | vue中组件的唯一标示 | 用来给子组件注册引用信息,详见 Vue 文档 |
class | String | 组件的样式类 | 在对应的 css 中定义的样式类 |
style | String | 组件的内联样式 | 可以动态设置的内联样式 |
hidden | Boolean | 组件是否隐藏 | 所有组件默认是显示的 |
data-* | Any | 自定义属性 | 组件上触发的事件时,会发送给事件处理函数 |
@* | EventHandler | 组件的事件 | 详见各组件详细文档,事件绑定参考 事件处理器 |
除了上述公共属性,还有一类特殊属性以v-
开头,称之为vue指令,如v-if、v-else、v-for、v-model。详见vue指令
#在组件中使用js变量
组件中可以使用script的data中定义的js变量,但组件的属性中使用和内容区使用的用法不一样。
下面的button组件示例,等价于上一个的示例。只不过静态内容改成动态js。
<template>
<view>
<button size="mini" :disabled="buttondisble" hover-start-time=20 >{{buttonText}}</button>
</view>
</template>
<script>
export default {
data() {
return {
"buttonText":"按钮",
"buttondisble":false
}
}
}
</script>
复制代码
#组件的事件
每个组件都有“事件”。事件就是在指定的条件下触发某个js方法。
比如button组件,有点击事件,也就是当手机用户点击这个button组件时,会触发这个事件。
事件也是组件的属性,只不过这类属性以@
为前缀。
事件的属性值,指向一个在script的methods里定义过的js方法,还可以给方法传参数。
下面是组件事件的示例:
<template>
<view>
<button size="mini" @click="goto('/pages/about/about')">按钮</button>
</view>
</template>
<script>
export default {
methods: {
goto(url) {
console.log("按钮被点击了,且传入的参数是:" + url)
}
}
}
</script>
复制代码
#基础组件
uni-app的组件,分为基础组件和扩展组件。
基础组件在uni-app框架中已经内置,无需将内置组件的文件导入项目,也无需注册内置组件,随时可以直接使用,比如<view>
组件。
除了基础组件,都称为扩展组件。扩展组件需要将组件导入项目中才可以使用。
uni-app为开发者提供了一系列基础组件,类似HTML里的基础标签元素。
但uni-app的组件与HTML不同,而是与小程序相同,可更好的满足手机端的使用习惯。
虽然不推荐使用HTML标签,但实际上如果开发者写了div
等标签,在编译到非H5平台时也会被编译器转换为view
标签,类似的还有span
转text
、a
转navigator
等,包括css里的元素选择器也会转。但为了管理方便、策略统一,新写代码时仍然建议使用view等组件。
开发者可以通过组合这些基础组件进行快速开发。在需要复用的情况下可封装成扩展组件。
uni-app
基础组件规范,与小程序规范相近。如果了解小程序开发的话,uni-app的基础组件会感觉很熟悉。但需要注意组件上的事件绑定,需要以 vue 的事件绑定语法来绑定,如 bindchange="eventName" 事件,需要写成 @change="eventName"
<picker mode="date" :value="date" start="2015-09-01" end="2020-09-01" @change="bindDateChange">
<view class="picker">
当前选择: {{date}}
</view>
</picker>
复制代码
#基础组件列表
基础组件分为以下十几大类:
视图容器(View Container):
组件名 | 说明 |
---|---|
view | 视图容器,类似于HTML中的div |
scroll-view | 可滚动视图容器 |
swiper | 滑块视图容器,比如用于轮播banner |
match-media | 屏幕动态适配组件,比如窄屏上不显示某些内容 |
movable-area | 可拖动区域 |
movable-view | 可移动的视图容器,在页面中可以拖拽滑动或双指缩放。movable-view必须在movable-area组件中 |
cover-view | 可覆盖在原生组件的上的文本组件 |
cover-image | 可覆盖在原生组件的上的图片组件 |
基础内容(Basic Content):
组件名 | 说明 |
---|---|
icon | 图标 |
text | 文字 |
rich-text | 富文本显示组件 |
progress | 进度条 |
表单组件(Form):
标签名 | 说明 |
---|---|
button | 按钮 |
checkbox | 多项选择器 |
editor | 富文本输入框 |
form | 表单 |
input | 输入框 |
label | 标签 |
picker | 弹出式列表选择器 |
picker-view | 窗体内嵌式列表选择器 |
radio | 单项选择器 |
slider | 滑动选择器 |
switch | 开关选择器 |
textarea | 多行文本输入框 |
路由与页面跳转(Navigation):
组件名 | 说明 |
---|---|
navigator | 页面链接。类似于HTML中的a标签 |
媒体组件(Media):
组件名 | 说明 |
---|---|
audio | 音频 |
camera | 相机 |
image | 图片 |
video | 视频 |
live-player | 直播播放 |
live-pusher | 实时音视频录制,也称直播推流 |
地图(Map):
组件名 | 说明 |
---|---|
map | 地图 |
画布(Canvas):
组件名 | 说明 |
---|---|
canvas | 画布 |
webview(Web-view):
组件名 | 说明 |
---|---|
web-view | web浏览器组件 |
广告
组件名 | 说明 |
---|---|
ad | 广告组件 |
ad-draw | 沉浸视频流广告组件 |
页面属性配置
组件名 | 说明 |
---|---|
custom-tab-bar | 底部tabbar自定义组件 |
navigation-bar | 页面顶部导航 |
page-meta | 页面属性配置节点 |
uniCloud
组件名 | 说明 |
---|---|
unicloud-db组件 | uniCloud数据库访问和操作组件 |
各平台专有组件
在小程序平台和nvue平台,还有一些专有组件,比如open-data,详见左侧导航
#扩展组件的意义
虽然所有的业务需求都可以通过基础组件满足,但仅有基础组件是低效的,实际开发中会有很多封装的组件。
比如我们需要一个五角星点击评分的组件,在DCloud的插件市场里可以获取到:uni-rate 评分 - DCloud 插件市场
把这个uni-rate组件导入到你的uni-app项目下,在需要的vue页面里引用它,就可以在指定的地方显示出这个五角星组件。
<!-- 在index.vue页面引用 uni-rate 组件-->
<template>
<view>
<uni-rate></uni-rate><!-- 这里会显示一个五角星,并且点击后会自动亮星 -->
</view>
</template>
复制代码
封装扩展组件的优势:
#组件的类别
uni-app支持的组件分为vue组件和小程序自定义组件。
如果你还不了解这两种组件,可以参阅各自的文档
日常开发来讲,推荐使用vue组件。uni-app支持小程序组件主要是为了兼容更多生态资源。
如果扩展组件符合uni-app的easycom
组件规范,则可以免注册,直接使用。比如uni-ui扩展组件就符合easycom
组件规范。
如果组件不符合easycom规范,则需要在代码里手动import和注册组件,然后才能使用。
除了easycom规范外,扩展组件还有很多概念,比如uni_module
、datacom
、原生组件
、uniCloud组件
。
接下来一一讲解。
#easycom组件规范
HBuilderX 2.5.5
起支持
传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom
将其精简为一步。
只要组件安装在项目的components目录下或uni_modules
目录下,并符合components/组件名称/组件名称.vue
目录结构。就可以不用引用、注册,直接在页面中使用。
比如前述举例的uni-rate组件,它导入到uni-app项目后,存放在了目录/components/uni-rate/uni-rate.vue
同时它的组件名称也叫uni-rate,所以这样的组件,不用在script里注册和引用。 如下:
<template>
<view>
<uni-rate></uni-rate><!-- 这里会显示一个五角星,并且点击后会自动亮星 -->
</view>
</template>
<script>
// 这里不用import引入,也不需要在components内注册uni-list组件。template里就可以直接用
export default {
data() {
return {
}
}
}
</script>
复制代码
不管components目录下安装了多少组件,easycom
打包后会自动剔除没有使用的组件,对组件库的使用尤为友好。
组件库批量安装,随意使用,自动按需打包。以官方的uni-ui
为例,在HBuilderX新建项目界面选择uni-ui
项目模板,只需在页面中敲u,拉出大量组件代码块,直接选择,即可使用。大幅提升开发效率,降低使用门槛。
在DCloud插件市场下载符合components/组件名称/组件名称.vue
目录结构的组件,均可直接使用。
easycom
是自动开启的,不需要手动开启。
如果你的组件名称或路径不符合easycom的默认规范,可以在pages.json
的easycom
节点进行个性化设置,自定义匹配组件的策略。另见
如果不使用easycom,手动引用和注册vue组件,则需要分3步写如下代码:
<template>
<view>
<uni-rate text="1"></uni-rate><!-- 3.使用组件 -->
</view>
</template>
<script>
import uniRate from '@/components/uni-rate/uni-rate.vue';//1.导入组件
export default {
components:{uniRate }//2.注册组件
}
</script>
复制代码
#uni_module规范
uni_module其实不止服务于组件,它可以服务于组件、js库、页面、项目等所有DCloud插件市场所支持的种类。
符合uni_module规范的组件都在项目的uni_modules
目录下,以插件id为目录存放。(项目模板不放在uni_modules
目录下)
在HBuilderX中点右键可方便的更新插件,插件作者也可以方便的上传插件。
uni_module还支持云端一体的插件。
uni_module有详细的专项文档,请另行查阅uni_module规范。
#uniCloud组件
uniCloud是DCloud提供的、配套uni-app的云开发服务。
uni-app的基础组件中,有一个特殊基础组件是:<unicloud-db>
组件。
它可以在前端直接获取和操作uniCloud的云端数据库。
相关文档详见:unicloud-db组件
除了内置的数据库组件,在uni-ui扩展库里还有uniCloud的文件选择和上传组件,参考:uni-file-picker
#原生组件和原生插件
#基础组件里的原生组件
uni-app的基础组件里,有一批原生组件,如video、map...
这些组件如果用于vue页面,也就是webview渲染时,会造成层级高于普通前端组件的情况。
它们的层级需要使用cover-view等特殊组件才能覆盖,同时在使用中有些需要注意的事情。
在app-nvue里没有这些问题。
相关文档详见:uni-app内置原生组件说明
#uni-app的App端原生插件
uni-app的App端支持原生插件,这类插件使用iOS或Android原生语言编写,封装成插件,供其他开发者使用js来调用。
原生插件分为原生组件component和原生模块module。
其实原生组件component只能在App-nvue环境中使用。
相关文档详见:uni-app原生插件开发
#datacom
datacom组件是一种数据驱动的、可云端一体的组件。
传统组件只涉及前端概念,而datacom拉通了uniCloud云端数据,是uni-app+uniCloud协同开发的必备提效工具。
相关文档详见:datacom组件
#如何封装组件
封装组件涉及的知识点较多,相关文档详见:vue组件详解
#扩展组件(uni-ui)
详见: uni-ui介绍
更多组件
除了基础组件、uni-ui,插件市场还有更多扩展组件、模板,包括前端组件和原生扩展组件,具体见插件市场。
关于其他vue的web组件库、小程序组件库是否能在uni-app中使用的问题,参考关于uni-app的ui库、ui框架、ui组件 - DCloud问答
- 支付宝小程序使用
titleImage
时必须使用https
的图片链接地址,需要真机调试才能看到效果,支付宝开发者工具内无效果 globalStyle
中设置的titleImage
也会覆盖掉pages
->style
内的设置文字标题- 使用
maxWidth
时,页面内fixed元素需要使用--window-left,--window-right来保证布局位置正确 dynamicRpx
vue3 nvue页面已移除此配置,升级为横竖屏切换自动rpx,如果不需要可以使用 px-
组件
- 组件是视图层的基本组成单元。
- 组件是一个单独且可复用的功能模块的封装。
- 组件名称由尖括号包裹,称为标签,它有开始标签和结束标签。结束标签的
<
后面用/
来表示结束。结束标签也称为闭合标签。如下面示例的<component-name>
是开始标签,</component-name>
是结束标签。 - 在开始标签和结束标签之间,称为组件内容。如下面示例的
content
- 开始标签上可以写属性,属性可以有多个,多个属性之间用空格分割。如下面示例的
property1
和property2
。注意闭合标签上不能写属性。 - 每个属性通过
=
赋值。如下面的示例中,属性property1
的值被设为字符串value
。 - 在内容区使用时,使用两个花括号来包裹,如下面的
buttonText
- 在属性值中使用时,属性名的前面要加冒号前缀
- click是button组件的点击事件,在用户点击这个button时触发
- click指向了methods中定义的goto方法,并且传递了一个参数'/pages/about/about'
- 可以将组件进行任意次数的复用。
- 合理的划分组件,有助于提高应用性能。
- 代码更加方便组织和管理,并且扩展性也更强,便于多人协同开发。
- 组件化开发能大幅度提高应用开发效率、测试性、复用性等。
- vue组件:文档
- 小程序自定义组件:其规范不是vue规范,而是小程序规范,文档
- import导入组件
- components里注册组件
- template中使用组件
-
API
-
,参数,组件等是否在当前版本可用 #内存
API 说明 uni.onMemoryWarning 监听内存不足告警事件 #网络状态
API 说明 uni.getNetworkType 获取网络类型 uni.onNetworkStatusChange 监听网络状态变化 uni.offNetworkStatusChange 取消监听网络状态变化 #加速度计
API 说明 uni.onAccelerometerChange 监听加速度数据 uni.offAccelerometerChange 取消监听加速度数据 uni.startAccelerometer 开始监听加速度数据 uni.stopAccelerometer 停止监听加速度数据 #罗盘
API 说明 uni.onCompassChange 监听罗盘数据 uni.offCompassChange 取消监听罗盘数据 uni.startCompass 开始监听罗盘数据 uni.stopCompass 停止监听罗盘数据 #陀螺仪
API 说明 uni.onGyroscopeChange 监听陀螺仪数据 uni.startGyroscope 开始监听陀螺仪数据 uni.stopGyroscope 停止监听陀螺仪数据 #拨打电话
API 说明 uni.makePhoneCall 拨打电话 #扫码
API 说明 uni.scanCode 扫码 #剪切板
API 说明 uni.setClipboardData 设置剪贴板内容 uni.getClipboardData 获取剪贴板内容 #屏幕亮度
API 说明 uni.setScreenBrightness 设置屏幕亮度 uni.getScreenBrightness 获取屏幕亮度 uni.setKeepScreenOn 设置是否保持常亮状态 #用户截屏事件
API 说明 uni.onUserCaptureScreen 监听用户截屏事件 #振动
API 说明 uni.vibrate 使手机发生振动 uni.vibrateLong 使手机发生较长时间的振动 uni.vibrateShort 使手机发生较短时间的振动 #手机联系人
API 说明 uni.addPhoneContact 添加手机通讯录 #蓝牙
API 说明 uni.openBluetoothAdapter 初始化蓝牙模块 uni.startBluetoothDevicesDiscovery 搜寻附近的蓝牙外围设备 uni.onBluetoothDeviceFound 监听寻找到新设备的事件 uni.stopBluetoothDevicesDiscovery 停止搜寻 uni.onBluetoothAdapterStateChange 监听蓝牙适配器状态变化事件 uni.getConnectedBluetoothDevices 根据 uuid 获取处于已连接状态的设备 uni.getBluetoothDevices 获取已发现的蓝牙设备 uni.getBluetoothAdapterState 获取本机蓝牙适配器状态 uni.closeBluetoothAdapter 关闭蓝牙模块 #低耗蓝牙
API 说明 uni.writeBLECharacteristicValue 向低功耗蓝牙设备特征值中写入二进制数据 uni.readBLECharacteristicValue 读取低功耗蓝牙设备的特征值的二进制数据值 uni.onBLEConnectionStateChange 监听低功耗蓝牙连接状态的改变事件 uni.onBLECharacteristicValueChange 监听低功耗蓝牙设备的特征值变化事件 uni.notifyBLECharacteristicValueChange 启用蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征 uni.getBLEDeviceServices 获取蓝牙设备所有服务(service) uni.getBLEDeviceCharacteristics 获取蓝牙设备某个服务中所有特征值(characteristic) uni.createBLEConnection 连接低功耗蓝牙设备 uni.closeBLEConnection 断开与低功耗蓝牙设备的连接 #iBeacon
API 说明 uni.onBeaconServiceChange 监听 iBeacon 服务状态变化事件 uni.onBeaconUpdate 监听 iBeacon 设备更新事件 uni.getBeacons 获取所有已搜索到的 iBeacon 设备 uni.startBeaconDiscovery 停止搜索附近的 iBeacon 设备 uni.stopBeaconDiscovery 开始搜索附近的 iBeacon 设备 #生物认证
API 说明 uni.startSoterAuthentication 开始生物认证 uni.checkIsSupportSoterAuthentication 获取本机支持的生物认证方式 uni.checkIsSoterEnrolledInDevice 获取设备内是否录入如指纹等生物信息的接口 #界面
#交互反馈
API 说明 uni.showToast 显示提示框 uni.showLoading 显示加载提示框 uni.hideToast 隐藏提示框 uni.hideLoading 隐藏加载提示框 uni.showModal 显示模态弹窗 uni.showActionSheet 显示菜单列表 #设置导航条
API 说明 uni.setNavigationBarTitle 设置当前页面标题 uni.setNavigationBarColor 设置页面导航条颜色 uni.showNavigationBarLoading 显示导航条加载动画 uni.hideNavigationBarLoading 隐藏导航条加载动画 #设置 TabBar
API 说明 uni.setTabBarItem 动态设置 tabBar 某一项的内容 uni.setTabBarStyle 动态设置 tabBar 的整体样式 uni.hideTabBar 隐藏 tabBar uni.showTabBar 显示 tabBar uni.setTabBarBadge 为 tabBar 某一项的右上角添加文本 uni.removeTabBarBadge 移除 tabBar 某一项右上角的文本 uni.showTabBarRedDot 显示 tabBar 某一项的右上角的红点 uni.hideTabBarRedDot 隐藏 tabBar 某一项的右上角的红点 #背景
API 说明 uni.setBackgroundColor 动态设置窗口的背景色。 uni.setBackgroundTextStyle 动态设置下拉背景字体、loading 图的样式。 #动画
API 说明 uni.createAnimation 创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性。 #滚动
API 说明 uni.pageScrollTo 将页面滚动到目标位置。 #绘画
API 说明 uni.createCanvasContext 创建绘图上下文 uni.canvasToTempFilePath 将画布内容保存成文件 uni.canvasGetImageData 获取画布图像数据 uni.canvasPutImageData 设置画布图像数据 #下拉刷新
API 说明 onPullDownRefresh 监听该页面用户下拉刷新事件 uni.startPullDownRefresh 开始下拉刷新 uni.stopPullDownRefresh 停止当前页面下拉刷新 #节点信息
API 说明 uni.createSelectorQuery 创建查询请求 selectorQuery.select 根据选择器选择单个节点 selectorQuery.selectAll 根据选择器选择全部节点 selectorQuery.selectViewport 选择显示区域 selectorQuery.exec 执行查询请求 nodesRef.boundingClientRect 获取布局位置和尺寸 nodesRef.scrollOffset 获取滚动位置 nodesRef.fields 获取任意字段 #节点布局相交状态
API 说明 uni.createIntersectionObserver 创建 IntersectionObserver 对象 intersectionObserver.relativeTo 指定参照节点 intersectionObserver.relativeToViewport 指定页面显示区域作为参照区域 intersectionObserver.observe 指定目标节点并开始监听 intersectionObserver.disconnect 停止监听 #路由
API 说明 uni.navigateTo 保留当前页面,跳转到应用内的某个页面,使用 uni.navigateBack 可以返回到原页面 uni.redirectTo 关闭当前页面,跳转到应用内的某个页面 uni.reLaunch 关闭所有页面,打开到应用内的某个页面 uni.switchTab 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 uni.navigateBack 关闭当前页面,返回上一页面或多级页面 #键盘
API 说明 uni.hideKeyboard 隐藏已经显示的软键盘,如果软键盘没有显示则不做任何操作。 uni.onKeyboardHeightChange 监听键盘高度变化 uni.offKeyboardHeightChange 取消监听键盘高度变化事件 uni.getSelectedTextRange 在input、textarea等focus之后,获取输入框的光标位置 #第三方服务
API 说明 uni.getProvider 获取服务供应商 uni.login 登录 uni.getUserInfo 获取用户信息 uni.getuserprofile 获取用户信息。每次请求都会弹出授权窗口,用户同意后返回 userInfo uni.checkSession 检查登录状态是否过期 uni.preLogin 预登录 uni.closeAuthView 关闭一键登录页面 uni.getCheckBoxState 获取一键登录条款勾选框状态 uni.getUniverifyManager 获取全局唯一的一键登录管理器 univerifyManager uni.share 分享 uni.shareWithSystem 使用系统分享 uni.requestPayment 支付 uni.subscribePush 开启推送 uni.unsubscribePush 关闭推送 uni.onPush 监听透传数据 uni.offPush 移除监听透传数据 #广告
API 说明 激励视频广告 激励视频广告,是 cpm 收益最高的广告形式 全屏视频广告 全屏视频广告 内容联盟广告 内容联盟广告 插屏广告 插屏广告 互动游戏 互动游戏是 DCloud 联合三方服务商为开发者提供新的广告场景增值服务 #平台扩展
API 说明 uni.requireNativePlugin 引入 App 原生插件 #其他
#授权
API 说明 uni.authorize 提前向用户发起授权请求 #设置
API 说明 uni.openSetting 调起客户端小程序设置界面,返回用户设置的操作结果。 uni.getSetting 获取用户的当前设置。 #收货地址
API 说明 uni.chooseAddress 获取用户收货地址 #获取发票抬头
API 说明 uni.chooseInvoiceTitle 选择用户的发票抬头,需要用户授权 scope.invoiceTitle。 #小程序跳转
API 说明 uni.navigateToMiniProgram 打开另一个小程序。 uni.navigateBackMiniProgram 跳转回上一个小程序,只有当另一个小程序跳转到当前小程序时才会能调用成功。 #模板消息
API 说明 addTemplate 组合模板并添加至帐号下的个人模板库。 deleteTemplate 删除帐号下的某个模板。 getTemplateLibraryById 获取模板库某个模板标题下关键词库。 getTemplateLibraryList 获取 APP 模板库标题列表 getTemplateList 获取帐号下已存在的模板列表。 sendTemplateMessage 发送模板消息 alipay.open.app.mini.templatemessage.send 支付宝小程序通过 openapi 给用户触达消息,主要为支付后的触达(通过消费 id)和用户提交表单后的触达(通过 formId)。 #小程序更新
API 说明 uni.getUpdateManager 返回全局唯一的版本更新管理器对象: updateManager,用于管理小程序更新。 #调试
API 说明 uni.setEnableDebug 设置是否打开调试开关。此开关对正式版也能生效。 #获取第三方平台数据
API 说明 uni.getExtConfig 获取第三方平台自定义的数据字段。 uni.getExtConfigSync uni.getExtConfig 的同步版本。