uni-app学习日记

基础部分

  • 简介
  • 环境搭建
  • 外观设置
  • 数据绑定
  • 生命周期
  • 垮端兼容
  • 事件绑定
  • 导航跳转
  • 组件通信

uni-app介绍

什么是uni-app

        uni-app是个使用vue.js开发前端应用框架,编写一套代码可以发布到ios、安卓以及各种小程序等多个平台(微信、支付宝、百度、头条、QQ、钉钉)等多个平台。

uni-app的背景

  1. 用户端比较多,增加了运维商的维护成本
  2. 没有好用的跨平台框架
  3. 小程序的周边生态不太好

为什么要去使用uni-app

  1.  跨平台更多(微信、支付宝、百度、头条、QQ、钉钉)等多个平台
  2. 运行体验更好  
  3. 通用技术栈,学习成本更低
  4. 开放生态,组件更丰富

 环境搭建

安装HBuilder

下载HBuilder

HBuilder提供了丰富的移动端开发工具和插件,包括自动构建、调试、UI设计、代码分析等,非常适合开发移动应用。 VSCode则提供了强大的代码编辑、调试和扩展功能,适用于各种编程语言和项目类型。 使用体验:HBuilder在移动应用开发方面有着深入的优化,其界面简洁直观,支持实时预览和调试,可以更快地开发调试移动应用。

安装微信开发者工具

下载微信开发者工具

初始化项目

通过HBuilderX初始化项目
创建项目
  1. 在点击工具栏里的文件 -> 新建 -> 项目(快捷键Ctrl+N
  2. 选择uni-app类型,输入工程名,选择模板,点击创建,即可成功创建
运行项目
  1. 进入项目,点击工具栏的运行 -> 运行到浏览器 -> 选择浏览器
  2. 运行App到手机或模拟器:使用电压足够的usb端口连接手机,设置中开启USB调试,手机上允许电脑设备调试手机,进入项目,点击工具栏的运行 -> 运行App到手机或模拟器,即可在该设备里面体验uni-app
  3. 在微信开发者工具里运行:进入hello-uniapp项目,点击工具栏的运行 -> 运行到小程序模拟器 -> 微信开发者工具(如果是第一次使用,需要先配置小程序ide的相关路径,才能运行成功。微信开发者工具需要开启服务端口 在微信工具的设置->安全中)
  4. 在支付宝小程序开发者工具里运行:进入hello-uniapp项目,点击工具栏的运行 -> 运行到小程序模拟器 -> 支付宝小程序开发者工具

提示

  • 如果是第一次使用,需要配置开发工具的相关路径。点击工具栏的运行 -> 运行到小程序模拟器 -> 运行设置,配置相应小程序开发者工具的路径。
  • 微信小程序工具需要配置允许权限,不然HBuilder无法调用微信小程序开发工具的命令行
  • 支付宝/百度/抖音/360小程序工具,不支持直接指定项目启动并运行。因此开发工具启动后,请将 HBuilderX 控制台中提示的项目路径,在相应小程序开发者工具中打开
  • 如果自动启动小程序开发工具失败,请手动启动小程序开发工具并将 HBuilderX 控制台提示的项目路径,打开项目

uni-app基本使用

项目目录和文件作用

  1. pages.json  对uni-app进行全局配置,配置页面的路径、窗口样式、原生导航栏、底部的原生tabbar等

  2. manifest.json  文件对应的配置文件,用于指定应用的名称、图标和权限
  3. App.vue   根组件,所有页面都是在App.vue下进行切换的,是页面的入口文件,可以调用对应的生命周期函数
  4. main.js 项目的入口文件。初始化实例和需要用到的插件
  5. uni.scss 控制整体的风格样式。如按钮颜色,边框风格。还配置了一些变量配置
  6. unpackage 打包目录,有每个应用的打包文件
  7. pages 存放所有页面
  8. static 静态资源文件

兼容规范

        为了实现多端兼容,编译速度、性能等因素,uni-app约束了以下规范

  • 页面文件组训Vue单文件组件规范
  • 组件标签靠近小程序规范
  • 接口能力靠近微信小程序规范,但需将前缀wx替换为uni
  • 数据绑定及时间处理同vue.js规范,同时补充了App及页面的生命周期
  • 为兼容多端运行,建议使用flex布局进行开发  

全局配置

globalStyle

用于设置应用全局的状态栏、导航条、标题、窗口背景色等。

详情参考官网 GlobalStyle

属性类型默认值描述
navigationBarBackgroundColorHexColor#F8F8F8导航栏背景颜色
navigationBarTextStyleStringblack导航栏标题颜色及状态栏前景颜色,仅支持 black/white
navigationBarTitleTextString导航栏标题文字内容
backgroundColorHexColor#ffffff窗口背景色
backgroundTextStyleStringdark下拉 loading 的样式,仅支持 dark / light
enablePullDownRefreshBooleanfalse是否开启下拉刷新
app-plusObject设置编译到 App 平台的特定样式,参考app-plus
h5Object设置编译到 H5 平台的特定样式,参考H5
mp-weixinObjecct设置编译到 weixin 平台的特定样式,参考weixin

创建页面

在peges中创建一个新的目录message,在my下创建个.vue文件

<template>
	<view>
		Hello,我是信息页
	</view>
</template> 

<script>
</script>

<style>
</style>

配置页面

 pages
属性类型默认值描述
pathString置页面路径 数组中第一项表示应用启动页
styleObject配置页面窗口表现,配置项参考下方
needLoginBooleanfalse是否需要登录才可访问
 style

用于设置每个页面的状态栏、导航条、标题、窗口背景色等。

页面中配置项会覆盖 globalStyle 中相同的配置项

详情见 style

属性类型默认值描述
navigationBarBackgroundColorHexColor#F8F8F8导航栏背景颜色
navigationBarTextStyleStringblack导航栏标题颜色及状态栏前景颜色,仅支持 black/white
navigationBarTitleTextString导航栏标题文字内容
navigationBarShadowObject导航栏阴影
backgroundColorHexColor窗口的背景色
backgroundTextStyleStringdark下拉 loading 的样式,仅支持 dark/light
enablePullDownRefreshBooleanfalse是否开启下拉刷新
"pages": [ 
	{
	    "path": "pages/home/home",
		"style": {
			"navigationBarBackgroundColor": "#cccccc"
		}
	},
    {
			"path": "pages/list/list"
		},    
]

 

 tabBar

可以通过 tabBar 配置项指定一级导航栏,以及 tab 切换时显示的对应页

详细配置

tabBar
属性类型必填描述
colorHexColortab 上的文字默认颜色
selectedColorHexColortab 上的文字选中时的颜色
backgroundColorHexColortab 的背景色
borderStyleStringtabbar 上边框的颜色,可选值 black/white
listArraytab 的列表,详见 list 属性说明,最少2个、最多5个 tab
positionString可选值 bottom、top
fontSizeString文字默认大小
iconWidthString图标默认宽度(高度等比例缩放)
heightStringtabBar 默认高度

其中 list 接收一个数组,数组中的每个项都是一个对象,其属性值如下:

属性类型必填说明
pagePathString页面路径,必须在 pages 中先定义
textStringtab 上按钮文字,在 App 和 H5 平台为非必填。例如中间可放一个没有文字的+号图标
iconPathString图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 position 为 top 时,此参数无效,不支持网络图片,不支持字体图标
selectedIconPathString选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 position 为 top 时,此参数无效
visibleBoolean该项是否显示,默认显示
iconfontObject字体图标,优先级高于 iconPath

iconfont参数说明 

属性类型说明
textString字库 Unicode 码
selectedTextString选中后字库 Unicode 码
fontSizeString字体图标字号(px)
colorString字体图标颜色
selectedColorString字体图标选中颜色

提示

  • 当设置 position 为 top 时,将不会显示 icon
  • tabBar 中的 list 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序排序
  • tabbar 切换第一次加载时可能渲染不及时,可以在每个tabbar页面的onLoad生命周期里先弹出一个等待雪花(hello uni-app使用了此方式)
  • tabbar 的页面展现过一次后就保留在内存中,再次切换 tabbar 页面,只会触发每个页面的onShow,不会再触发onLoad。
  • 顶部的 tabbar 目前仅微信小程序上支持。需要用到顶部选项卡的话,建议不使用 tabbar 的顶部设置,而是自己做顶部选项卡,可参考 hello uni-app->模板->顶部选项卡。
	"tabBar": {
		"backgroundColor": "#555555",
		"borderStyle": "white",
		"fontSize": "24px",
		"list": [
			{
				"text": "首页",
				"pagePath": "pages/home/home"
			},
			{
				"text": "信息",
				"pagePath": "pages/message/message"
			}
		]
	},

 

condition

启动模式配置,仅开发期间生效,用于模拟直达页面的场景,如:小程序转发后,用户点击所打开的页面。

属性说明:

属性类型是否必填描述
currentNumbe当前激活的模式,list节点的索引值
listArray启动模式列表

list说明:

属性类型是否必填描述
nameString启动模式名称
pathString启动页面路径
queryString启动参数,可在页面的  函数里获得
"condition": {
		"current": 0,
		"list": [
			{
				"name": "详情",
				"path": "pages/detail/detail",
				"query": "id=80"
			}
		]
	},

 

基础组件

Text

属性名类型默认值说明
selectableBooleanfalse文本是否可选
user-selectBooleanfalse文本是否可选
spaceString显示连续空格
decodeBooleanfalse是否解码

space 值说明

说明
ensp中文字符空格一半大小
emsp中文字符空格大小
nbsp根据字体设置的空格大小

View

视图容器。

它类似于传统html中的div,用于包裹各种元素内容。

属性说明

属性名类型默认值说明
hover-classString指定按下去的样式类。当 hover-class="none" 时,没有点击态效
hover-stop-propagationBooleanfalse指定是否阻止本节点的祖先节点出现点击态(阻止事件冒泡)
hover-start-timeNumber50按住后多久出现点击态,单位毫秒
hover-stay-timeNumber400手指松开后点击态保留时间,单位毫秒
<view>
     <text selectable space="ensp">我能选 中吗</text>
</view>
<view class="box1" hover-class="hover-box1">
	box1
    <view 
        class="box2" 
        hover-class="hover-box2" 
        :hover-start-time="2000" 
        :hover-stay-time="4000" 
        hover-stop-propagation
     >
		box2
	</view>
 </view>

 

Button

按钮。

属性说明

详细配置

属性名类型默认值说明
sizeStringdefault按钮的大小
typeStringdefault按钮的样式类型
plainBooleanfalse按钮是否镂空,背景色透明
disabledBooleanfalse是否禁用
loadingBooleanfalse名称前是否带 loading 图标
form-typeString用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件
open-typeString开放能力
hover-classStringbutton-hover指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果
hover-start-timeNumber20按住后多久出现点击态,单位毫秒
hover-stay-timeNumber70手指松开后点击态保留时间,单位毫秒
<button type="primary" size="default">
	按钮
</button>
<button type="primary" size="mini">
	按钮
</button>
<button plain>按钮</button>
<button loading>按钮</button>

 

image 

图片组件。

详细配置

属性名类型默认值说明
srcString图片资源地址
modeString'scaleToFill'图片裁剪、缩放的模式
lazy-loadBooleanfalse图片懒加载。只针对page与scroll-view下的image有效
fade-showBooleantrue图片显示动画效果
draggableBooleantrue是否能拖动图片

mode 有效值

详细配置

模式说明
缩放aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。
缩放aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。
<image src="https://img-baofun.zhhainiao.com/pcwallpaper_ugc/static/dcf2ba9b17ef9b09020a67e42fa6cf28.jpg?x-oss-process=image%2fresize%2cm_lfit%2cw_1920%2ch_1080" mode="aspectFill"></image>
<image src="https://img-baofun.zhhainiao.com/pcwallpaper_ugc/static/dcf2ba9b17ef9b09020a67e42fa6cf28.jpg?x-oss-process=image%2fresize%2cm_lfit%2cw_1920%2ch_1080" mode="aspectFit"></image>
<image src="https://img-baofun.zhhainiao.com/pcwallpaper_ugc/static/dcf2ba9b17ef9b09020a67e42fa6cf28.jpg?x-oss-process=image%2fresize%2cm_lfit%2cw_1920%2ch_1080"></image>

 

页面样式

css预处理器支持

uni-app 支持less、sass、scss、stylus等预处理器。

尺寸单位

uni-app 支持的通用 css 单位包括 px、rpx

  • px 即屏幕像素
  • rpx 即响应式 px,一种根据屏幕宽度自适应的动态单位。以 750 宽的屏幕为基准,750rpx 恰好为屏幕宽度。屏幕变宽,rpx 实际显示效果会等比放大,但在 App(vue2 不含 nvue) 端和 H5(vue2) 端屏幕宽度达到 960px 时,默认将按照 375px 的屏幕宽度进行计算

开发者可以通过设计稿基准宽度计算页面元素 rpx 值,设计稿 1px 与框架样式 1rpx 转换公式如下:

设计稿 1px / 设计稿基准宽度 = 框架样式 1rpx / 750rpx

换言之,页面元素宽度在 uni-app 中的宽度计算公式:

750 * 元素在设计稿中的宽度 / 设计稿基准宽度

样式导入

使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束

内联样式

框架组件上支持使用 style、class 属性来控制组件的样式。

全局样式与局部样式

定义在 App.vue 中的样式为全局样式,作用于每一个页面。在 pages 目录下 的 vue 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 App.vue 中相同的选择器。

Tips

  • App.vue 中通过 @import 语句可以导入外联样式,一样作用于每一个页面。
  • nvue 页面暂不支持全局样式

字体图标

  • 支持 base64 格式字体图标。
  • 支持网络路径字体图标。
  • 小程序不支持在 css 中使用本地文件,包括本地的背景图和字体文件。需以 base64 方式方可使用。
  • 网络路径必须加协议头 https
  • 从 http://www.iconfont.cn 上拷贝的代码,默认是没加协议头的。
  • 从 http://www.iconfont.cn 上下载的字体文件,都是同名字体(字体名都叫 iconfont,安装字体文件时可以看到),在 nvue 内使用时需要注意,此字体名重复可能会显示不正常,可以使用工具修改。
  • 使用本地路径图标字体需注意:
    1. 为方便开发者,在字体文件小于 40kb 时,uni-app 会自动将其转化为 base64 格式;
    2. 字体文件大于等于 40kb,仍转换为 base64 方式使用的话可能有性能问题,如开发者必须使用,则需自己将其转换为 base64 格式使用,或将其挪到服务器上,从网络地址引用;
    3. 字体文件的引用路径推荐使用以 ~@ 开头的绝对路径

数据绑定

定义数据和vue相同,在data中定义数据即可

<script>
	export default {
		data() {
			return {
				msg: '我是msg',
				flag: true,
				num: 1
			}
		},
	}
</script>

插值表达式的使用

<template>
	<view>
		<view>{{ msg }}</view>
		<view>{{ flag ? '真' : '假' }}</view>
		<view>{{ num + 1 }}</view>
	</view>
</template>

动态绑定数据

v-bind 简写 :

<view>
	<image :src="msg" mode="aspectFit"></image>
</view>

v-for遍历数据

<view v-for="(item, index) in arr" :key="item.id">
	我是{{ item.name }},我今年{{ item.age }}岁啦
</view>

事件绑定

uni中的事件绑定和vue是相同的,通过v-on绑定事件,也可以简写为@

<button type="primary" @click="btnClick(50, $event)">按钮</button>

时间函数定义在methods中

methods: {
	btnClick(num, e) {
		console.log('我是数字:', num, '我是事件对象:', e)
	}
}

生命周期

应用声明周期

详细配置

函数名说明
onLaunchuni-app 初始化完成时触发(全局只触发一次),参数为应用启动参数
onShow当 uni-app 启动,或从后台进入前台显示,参数为应用启动参数
onHide当 uni-app 从前台进入后台
onError当 uni-app 报错时触发
		onLaunch: function() {
			console.log('App Launch', 'app初次运行')
		},
		onShow: function() {
			console.log('App Show', 'app显示了')
		},
		onHide: function() {
			console.log('App Hide', 'app隐藏了')
		}

 

页面生命周期

详细配置

函数名说明
onInit监听页面初始化,其参数同 onLoad 参数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad
onLoad监听页面加载,该钩子被调用时,响应式数据、计算属性、方法、侦听器、props、slots 已设置完成,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参)
onShow监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady监听页面初次渲染完成,此时组件已挂载完成,DOM 树($el)已可用,注意如果渲染速度快,会在页面进入动画完成前触发
onHide监听页面隐藏
onUnload监听页面卸载
onPullDownRefresh监听用户下拉动作,一般用于下拉刷新
onReachBottom页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
	onLoad(options) {
		console.log('页面初次加载完成', '接收到的参数是', options)
	},
	onShow() {
		console.log('页面展示了')
	},
	onHide(options) {
		console.log('页面隐藏了')
	},
	onReady() {
		console.log('页面加载完成了')
	},
	onUnload() {
		console.log('页面卸载了')
	}

 

下拉刷新

开启下拉刷新

  • 在pages.json中找到pages节点,在style中开启enablePullDownRefresh
  • 通过调用uni.startPullDownRefresh()

监听下来刷新可以通过onPullDownRefresh生命周期

关闭下拉刷新可以通过stopPullDownRefresh

<template>
	<view>
		<view>列表页面</view>
		<view v-for="item in dataList">
			{{ item }}
		</view>
		<button @click="btnRefresh">手动刷新</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				dataList : ['vue', 'react', 'jest', 'umi', 'uni-app', 'react-native']
			}
		},
		methods: {
			btnRefresh() {
				uni.startPullDownRefresh()
			}
		},
		onPullDownRefresh() {
			setTimeout(()=> {
				this.dataList = ['umi', 'uni-app', 'react-native', 'vue', 'react', 'jest']
				uni.stopPullDownRefresh()	
			}, 5000)
		}
	}
</script>

<style>
</style>

上拉加载

可以通过生命周期onReachBottom监听下拉加载

<template>
	<view>
		<view>列表页面</view>
		<view v-for="item in dataList" style="height: 200px;">
			{{ item }}
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				dataList : ['vue', 'react', 'jest', 'umi', 'uni-app', 'react-native']
			}
		},
		onReachBottom() {
			this.dataList.push(...['vue', 'react', 'jest', 'umi', 'react-native'])
		}
	}
</script>

<style>
</style>

网络请求

发起网络请求。

OBJECT 参数说明:详细参数

参数名类型必填默认值说明
urlString开发者服务器接口地址
dataObject/String/ArrayBuffe请求的参数
headerObject设置请求的 header,header 中不能设置 Referer
methodStringGET有效值详见下方说明
timeoutNumber60000超时时间,单位 ms
dataTypeStringjson如果设为 json,会对返回的数据进行一次 JSON.parse,非 json 不会进行 JSON.parse
responseTypeStringtext设置响应的数据类型。合法值:text、arraybuffer

method 

methodAppH5微信小程序支付宝小程序百度小程序抖音小程序、飞书小程序快手小程序京东小程序
GET
POST
PUTxxx
DELETExxxx
CONNECTxxxxxx
HEADxxxx
OPTIONSxxxx
TRACExxxxxx

数据缓存

uni.setStorage

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口

OBJECT 参数说明

参数名类型必填说明
keyString本地缓存中的指定的 key
dataAny需要存储的内容,只支持原生类型、及能够通过 JSON.stringify 序列化的对象
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

 

uni.setStorage({  
    key: 'storage_key',  
    data: 'hello',  
    success: function () {  
        console.log('save success');  
    },  
    fail: function (err) {  
        console.log('save fail', err);  
    }  
});
 
uni.setStorage({  
    key: 'storage_key',  
    data: 'hello'  
}).then(() => {  
    console.log('save success');  
}).catch(err => {  
    console.log('save fail', err);  
});

uni.setStorageSync

将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。

参数说明

参数类型必填说明
keyString本地缓存中的指定的 key
dataAny需要存储的内容,只支持原生类型、及能够通过 JSON.stringify 序列化的对象
try {  
    uni.setStorageSync('storage_key', 'hello');  
    console.log('save success');  
} catch (e) {  
    console.log('save fail', e);  
}

 

uni.getStorage

从本地缓存中异步获取指定 key 对应的内容。

OBJECT 参数说明

参数名类型必填说明
keyString本地缓存中的指定的 key
successFunction接口调用的回调函数,res = {data: key对应的内容}
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
uni.getStorage({  
    key: 'user_token',  
    success: function(res) {    
        console.log('获取到的token:', res.data);    
    },  
    fail: function(err) {  
        // 处理获取失败的情况  
        console.error('获取token失败:', err);  
    }  
}); 

 

uni.getStorageSync

参数说明

参数类型必填说明
keyString本地缓存中的指定的 key
try {  
    let token = uni.getStorageSync('user_token');  
    console.log('获取到的token:', token);   
} catch (err) {  
    // 处理获取失败的情况  
    console.error('获取token失败:', err);  
}  

 

uni.removeStorage 

从本地缓存中异步移除指定 key。

OBJECT 参数说明

参数名类型必填说明
keyString本地缓存中的指定的 key
successFunction接口调用的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

uni.removeStorageSync

从本地缓存中同步移除指定 key。

参数说明

参数名类型必填说明
keyString本地缓存中的指定的 key

图片上传和预览

uni.chooseImage

从本地相册选择图片或使用相机拍照。

参数名类型必填说明
countNumber最多可以选择的图片张数,默认9
sizeTypeArray<String>original 原图,compressed 压缩图,默认二者都有
extensionArray<String>根据文件拓展名过滤,每一项都不能是空字符串。默认不过滤。
sourceTypeArray<String>album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
cropObject图像裁剪参数,设置后 sizeType 失效
successFunction成功则返回图片的本地文件路径列表 tempFilePaths
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
uploadImg() {
	uni.chooseImage({
		count: 3,
		success:(res) => {
			console.log(res)
			this.imgList = res.tempFilePaths
		}
	})
},

uni.previewImage

预览图片。

OBJECT 参数说明

参数名类型必填说明
currentString/Number详见下方说明详见下方说明
showmenuBoolean是否显示长按菜单,默认值为 true
urlsArray<String>需要预览的图片链接列表
indicatorString图片指示器样式,可取值:"default" - 底部圆点指示器; "number" - 顶部数字指示器; "none" - 不显示指示器。
loopBoolean是否可循环预览,默认值为 false
longPressActionsObject长按图片显示操作菜单,如不填默认为保存相册
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
  <template>
      <image v-for="(item, index) in imgList" :key="index" :src="item" mode="aspectFit" @click="previewImg(item)"></image>
  </template>

previewImg(imgUrl) {
	uni.previewImage({
		current: imgUrl,
		urls: this.imgList	
	})
}

 

 跨端兼容

为什么选择条件编译处理跨端兼容

uni-app 已将常用的组件、API封装到框架中,开发者按照 uni-app 规范开发即可保证多平台兼容,大部分业务均可直接满足。

但每个平台有自己的一些特性,因此会存在一些无法跨平台的情况。

  • 大量写 if else,会造成代码执行性能低下和管理混乱。
  • 编译到不同的工程后二次修改,会让后续升级变的很麻烦。
  • 为每个平台重写,明明主业务逻辑又一样

条件编译

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。

#使用方法

以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。

  • #ifdef:if defined 仅在某平台存在
  • #ifndef:if not defined 除了某平台均存在
  • %PLATFORM%:平台名称
条件编译写法说明

#ifdef APP-PLUS
需条件编译的代码
#endif

仅出现在 App 平台下的代码

#ifndef H5
需条件编译的代码
#endif

除了 H5 平台,其它平台均存在的代码(注意if后面有个n)

#ifdef H5 || MP-WEIXIN
需条件编译的代码
#endif

在 H5 平台或微信小程序平台存在的代码(这里只有||,不可能出现&&,因为没有交集)

%PLATFORM% 可取值:

生效条件
VUE3uni-app js引擎版用于区分vue2和3
VUE2uni-app js引擎版用于区分vue2和3
UNI-APP-X用于区分是否是uni-app x项目 
uniVersion用于区分编译器的版本 
APPApp
APP-PLUSuni-app js引擎版编译为App时
APP-PLUS-NVUE或APP-NVUEApp nvue 页面
APP-ANDROIDApp Android 平台 
APP-IOSApp iOS 平台 
H5H5(推荐使用 WEB
WEBweb(同H5
MP-WEIXIN微信小程序
MP-ALIPAY支付宝小程序
MP-BAIDU百度小程序
MP-TOUTIAO抖音小程序
MP-LARK飞书小程序
MP-QQQQ小程序
MP-KUAISHOU快手小程序
MP-JD京东小程序
MP-360360小程序
MP微信小程序/支付宝小程序/百度小程序/抖音小程序/飞书小程序/QQ小程序/360小程序
QUICKAPP-WEBVIEW快应用通用(包含联盟、华为)
QUICKAPP-WEBVIEW-UNION快应用联盟
QUICKAPP-WEBVIEW-HUAWEI快应用华为
	<!-- #ifdef MP-WEIXIN -->
	<view>我在小程序中显示</view>
	<!-- #endif -->
	<!-- #ifdef H5 -->
	<view>我在浏览器展示</view>
	<!-- #endif -->

 

页面路由跳转

页面跳转。

该组件类似HTML中的<a>组件,但只能跳转本地页面。目标页面必须在pages.json中注册

属性说明

详细信息

属性名类型默认值说明
urlString应用内的跳转链接,值为相对路径或绝对路径,如:"../first/first","/pages/first/first",注意不能加 .vue 后缀
open-typeStringnavigate跳转方式

open-type 有效值

说明
navigate对应 uni.navigateTo 的功能
redirect对应 uni.redirectTo 的功能
switchTab对应 uni.switchTab 的功能
reLaunch对应 uni.reLaunch 的功能
navigateBack对应 uni.navigateBack 的功能
exit退出小程序,target="miniProgram"时生效
	<navigator url="/pages/list/list" open-type="navigate">跳转到list</navigator>
	<navigator url="/pages/list/list" open-type="redirect">重定向到list</navigator>
	<navigator url="/pages/home/home" open-type="switchTab">跳转到home页</navigator>

 

 uni.navigateTo

保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。

OBJECT参数说明

参数类型必填默认值说明
urlString需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数
animationTypeStringpop-in窗口显示的动画效果
animationDurationNumber300窗口动画持续时间,单位为 ms
eventsObject页面间通信接口,用于监听被打开页面发送到当前页面的数据。2.8.9+ 开始支持。
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
 uni.navigateTo({  
     url: '/pages/detail/detail?id=123&name=example'  
 });  

 

uni.redirectTo 

关闭当前页面,跳转到应用内的某个页面。 

参数类型必填说明
urlString需要跳转的应用内非 tabBar 的页面的路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2'
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

uni.switchTab 

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。

参数类型必填说明
urlString需要跳转的 tabBar 页面的路径(需在 pages.json 的 tabBar 字段定义的页面),路径后不能带参数
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
uni.switchTab({  
   url: '/pages/message/message'
}); 

 

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。

参数类型必填默认值说明
deltaNumber1返回的页面数,如果 delta 大于现有页面数,则返回到首页。
animationTypeStringpop-out窗口关闭的动画效果
animationDurationNumber300窗口关闭动画的持续时间,单位为 ms
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

页面通讯

uni.$emit

触发全局的自定义事件,附加参数都会传给监听器回调函数。

属性类型描述
eventNameString事件名
OBJECTObject触发事件携带的附加参数
uni.$emit('eventName', { key: 'value' });

 

uni.$on

监听全局的自定义事件,事件由 uni.$emit 触发,回调函数会接收事件触发函数的传入参数。

属性类型描述
eventNameString事件名
callbackFunction事件的回调函数
uni.$on('eventName', function(data) {  
  console.log('监听到事件:', data);  
});

 

uni.$off

移除全局自定义事件监听器。

属性类型描述
eventNameArray<String>事件名
callbackFunction事件的回调函数

Tips

  • 如果uni.$off没有传入参数,则移除App级别的所有事件监听器;
  • 如果只提供了事件名(eventName),则移除该事件名对应的所有监听器;
  • 如果同时提供了事件与回调,则只移除这个事件回调的监听器;
  • 提供的回调必须跟$on的回调为同一个才能移除这个回调的监听器;
uni.$off('eventName', handler);

uni.$once(eventName,callback)

监听全局的自定义事件,事件由 uni.$emit 触发,但仅触发一次,在第一次触发之后移除该监听器。

属性类型描述
eventNameString事件名
callbackFunction事件的回调函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值