相关文档
简介
组件
https://uniapp.dcloud.net.cn/component/
API
https://uniapp.dcloud.net.cn/api/
演示
https://hellouniapp.dcloud.net.cn/pages/component/view/view
判断环境
https://uniapp.dcloud.net.cn/api/other/getAccountInfoSync.html#getaccountinfosync
示例
1 | const accountInfo = uni.getAccountInfoSync(); |
其中miniProgram.envVersion
develop
开发版:开发工具中运行或真机调试时trial
体验版:提交后设置为体验版release
正式版:提交并审核上架后gray
灰度版(仅支付宝小程序支持)
状态栏/导航条
状态栏
官方默认的高度--status-bar-height
的值是固定的25px
。
这就导致不同型号的手机的状态栏的高度是不一样的,导致实际效果并不好。
导航栏在不同的型号上是不受影响的都是44px
。
1 | .status_bar { |
JS中
1 | <script> |
状态栏设置
1 | <!-- 这里是状态栏 --> |
导航条
pages.json
1 | "globalStyle": { |
导航条颜色一般是通过navigationBarTextStyle
配置
导航栏标题颜色及状态栏前景颜色,仅支持 black/white
但是支付宝小程序不支持
支付宝是通过navigationBarBackgroundColor
影响,只有值是#ffffff
的时候文字就是黑的,其它值文字都是白的。
样式中使用
有这种情况,假如我们有一个组件使用的定位是粘性定位,这就要设置top的值,并且top应该是状态栏和导航的和。
这种情况是不能用sass的变量的,sass的变量不是运行时的变量,而状态栏的高度我们只能在运行时获取,所以我们可以用CSS变量。
1 | <template> |
样式中直接这样用就行了
1 | position: sticky; |
注意
不要在
App.vue
中设置变量,页面中无法获取。
TabBar
pages.json
中 配置
1 | { |
如果要用图标字体
1 | { |
交互反馈
API | 说明 |
---|---|
uni.showToast | 显示提示框 |
uni.hideToast | 隐藏提示框 |
uni.showLoading | 显示加载提示框 |
uni.hideLoading | 隐藏加载提示框 |
uni.showModal | 显示模态弹窗 |
uni.showActionSheet | 显示菜单列表 |
消息
1 | uni.showToast({ |
Loading
1 | uni.showLoading({ |
如果没设置title,默认为加载中
1 | uni.showLoading(); |
提示带确定
1 | uni.showModal({ |
和支付宝小程序的下面的方法类似
1 | my.alert({ |
确认提示框
1 | uni.showModal({ |
底部菜单
1 | uni.showActionSheet({ |
展示类组件
Image
1 | <image src="/static/imgs/home/search.png" mode="scaleToFill"></image> |
如果我们想只设置宽度,让高度自适应
1 | <image src="/static/imgs/01.jpg" mode="widthFix"></image> |
mode 有效值
默认为scaleToFill
mode 有 14 种模式,其中 5 种是缩放模式,9 种是裁剪模式。
模式 | 值 | 说明 |
---|---|---|
缩放 | scaleToFill | 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 |
缩放 | aspectFit | 保持纵横比缩放图片,使图片的长边能完全显示出来。 也就是说,可以完整地将图片显示出来。 |
缩放 | aspectFill | 保持纵横比缩放图片,只保证图片的短边能完全显示出来。 也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。 |
缩放 | widthFix | 宽度不变,高度自动变化,保持原图宽高比不变 |
缩放 | heightFix | 高度不变,宽度自动变化,保持原图宽高比不变 App 和 H5 平台 HBuilderX 2.9.3+ 支持、微信小程序需要基础库 2.10.3 |
裁剪 | top | 不缩放图片,只显示图片的顶部区域 |
裁剪 | bottom | 不缩放图片,只显示图片的底部区域 |
裁剪 | center | 不缩放图片,只显示图片的中间区域 |
裁剪 | left | 不缩放图片,只显示图片的左边区域 |
裁剪 | right | 不缩放图片,只显示图片的右边区域 |
裁剪 | top left | 不缩放图片,只显示图片的左上边区域 |
裁剪 | top right | 不缩放图片,只显示图片的右上边区域 |
裁剪 | bottom left | 不缩放图片,只显示图片的左下边区域 |
裁剪 | bottom right | 不缩放图片,只显示图片的右下边区域 |
文本展示
1 | <text>{{text}}</text> |
轮播图
1 | <swiper class="swiper" circular :indicator-dots="true" :autoplay="true" interval="5000" duration="500"> |
官方文档
https://uniapp.dcloud.net.cn/component/swiper.html
其中
interval 是多长时间切换下一张 单位毫秒
duration 一张切换的时长 单位毫秒
样式
1 | .swiper { |
输入类组件
输入框
1 | <input |
多行输入
1 | <textarea class="info_detail" disabled auto-height :value="info_text"></textarea> |
输入
1 | <textarea |
选择类组件
单选
单选
1 | <radio value="r1" :checked="false" /> |
注意
radio
上没法绑定事件,绑定事件需要外面套一个radio-group
。
大小调整
1 | <radio value="r1" checked="false" style="transform: scale(0.7)" /> |
单选和文字
1 | <label class="radio"><radio value="r1" checked="true" />选中</label> |
样式调整
1 | <radio value="r1" :checked="true" color="#fa7e31" style="transform: scale(0.7)" /> |
单选按钮组
1 | <radio-group @change="radioChange"> |
方法
1 | export default { |
注意
radio-group
上不支持绑定值,还得在radio
上控制选中与未选中。
对象列表
1 | <radio-group @change="radioChange"> |
JS
1 | export default { |
弹出菜单
在支付宝小程序中是中间弹出,有的是底部弹出
https://uniapp.dcloud.net.cn/component/uniui/uni-combox.html
1 | <picker |
JS
1 | import { reactive, ref } from 'vue'; |
选项式
1 | export default { |
注意
e.detail.value
不是对象中的value
,而是选中项的索引。
弹出层
https://ext.dcloud.net.cn/plugin?name=uni-popup
https://uniapp.dcloud.net.cn/component/uniui/uni-popup.html
使用
1 | <uni-popup ref="popup" type="center" :animation="false" :safe-area="false">中间弹出 Popup</uni-popup> |
打开关闭
1 | openPop() { |
或者代码中指定位置
1 | //如果传入参数 ,type 属性将失效 ,仅支持 ['top','left','bottom','right','center'] |
蒙版点击不关闭
1 | <uni-popup |
弹出方位
模板中type支持的类型如下:
但是不建议用后面三种,这三种本质还是上面的5种。
属性名 | 说明 |
---|---|
top | 顶部弹出 |
center | 居中弹出 |
bottom | 底部弹出 |
left | 左侧弹出 |
right | 右侧弹出 |
message | 预置样式 :消息提示 |
dialog | 预置样式 :对话框 |
share | 预置样式 :底部弹出分享示例 |
问题
下弹窗不显示
当从下面弹出的时候默认的:safe-area="true"
会导致弹窗不显示,改成false
就可以了。
1 | <uni-popup ref="popup" type="bottom" :animation="true" :safe-area="false"> |
禁用页面滚动
使用组件时,会发现内容部分滚动到底时,继续划动会导致底层页面的滚动,这就是滚动穿透。
但由于平台自身原因,除了h5平台外 ,其他平台都不能在在组件内禁止滚动穿透,所以页面内需要用户特殊处理一下。
弹出层显示的时候禁止页面滚动
1 | <view class="goods_detail_outer" :style="{ overflow: popIsShow ? 'hidden' : 'visible' }"></view> |
JS
1 | export default { |
日期选择
1 | <picker mode="date" :value="date" start="2020-01-01" end="2030-01-01" @change="bindDateChange"> |
安装
1 | npm install moment |
引用
1 | // 引入moment.js |
使用
1 | moment().format('YYYY-MM-DD'); |
图片选择
https://uniapp.dcloud.net.cn/component/uniui/uni-file-picker.html
模板
1 | <uni-file-picker limit="3" title="最多选择3张图片" @select="selectImg" @delete="delIMG"></uni-file-picker> |
图片上传
1 | export default { |
选择文件的回调或者删除回调地址都是类似于下面的形式
1 | https://resource/apmlce3576a795169631d401bbc08d272fba.png |
收货地址选择
JS
1 | uni.chooseAddress({ |
用户选择后返回的格式
1 | { |
可以看出
外层和result中的数据基本一致,内层的会更详细一点。
建议在这样写
支付宝的详细地址中新添加的是没有省市区的,但是之前的地址详情中却有,这里判断了一下。
1 | chooseAddress() { |
web-view
web-view
是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面。
小程序仅支持加载网络网页,不支持本地html。
小程序端 web-view 组件一定有原生导航栏,下面一定是全屏的 web-view 组件,navigationStyle: custom 对 web-view 组件无效,外层嵌套view也不起作用。
定义样式(小程序无效)
1 | <template> |
富文本
1 | <rich-text :nodes="getHtmlFitImg(goodsDetail.comm)"> |
图片处理,让详情中的图片的最大宽度为100%
1 | getHtmlFitImg(htmlStr) { |
复制到剪贴板
1 | // 在方法中调用复制到剪贴板的操作 |
自定义组件
传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。
easycom
将其精简为一步。
只要组件安装在项目的components
目录下或uni_modules
目录下,并符合components/组件名称/组件名称.(vue|uvue)
目录结构,就可以不用引用、注册,直接在页面中使用。
状态栏占位组件
状态栏我们可能每个页面都用,为了方便,我们可以定义为组件。
文件目录/components/z-statusbar/z-statusbar.vue
页面
1 | <template> |
这样我们就可以直接使用了
1 | <z-statusbar></z-statusbar> |
导航条占位组件
文件目录/components/z-navigationbar/z-navigationbar.vue
页面
1 | <template> |
这样我们就可以直接使用了
1 | <z-navigationbar></z-navigationbar> |
拨打电话
1 | callPhone(phone) { |