uniapp自定义返回事件(封装)

server/2024/10/19 1:27:57/

uniapp自定义返回事件

在我们使用uniapp时,我们导航栏一般都是自定义的,比如用uview框架的导航栏,那么返回事件通常会遇到以下几个问题

  • 返回事件前需要做一些额外的处理
  • h5项目刷新页面后返回失效
  • 返回按钮点击后到指定页面

如果只是监听返回按钮,可以通过onBackPress实现,但是很多时候为了开发起来维护方便,一般都是写一个导航栏组件统一管理,于是我这边简单封装了下导航栏组件。

在这里插入图片描述

核心代码如下:

javascript">  customBack (callback) {if (this.customUrl) {uni[this.pageType]({url:this.customUrl })return}const pages = getCurrentPages()if (callback) {callback()}else  {if(pages.length === 1) {history.back()}	else {uni.navigateBack()}}}
  • (参数)customUrl 自定义跳转路径
  • (参数)pageType 跳转类型,如navigateTo、redirectTo、switchTab
  • (参数)callback 回调函数,一般用于处理一些额外逻辑
  • (参数)isOverlay 这个是我根据自己的业务需求加的,本身导航栏会占位,部分页面需要不占位,下面代码中有这个参数。
  • getCurrentPages 获取页面栈,如果h5项目刷新后,将会被清除页面栈,这个时候如果要返回上一级,则需要调用浏览器的返回方法history.back()
  • sort插槽右侧按钮

在这里插入图片描述

使用起来也方便

  <navbar title="标题"/><navbar title="标题" custom-url="/pages/meu/index" page-type="switchTab"/><navbar title="标题"><view class="navbar-right" @click="saveEvent">自定义右侧按钮</view></navbar>

完整代码如下

  <template><u-navbar :title="title" :is-back='isBack' :class="isOverlay ? 'overlay' : ''" :custom-back='customBack'><template slot="right"><slot></slot></template></u-navbar></template><script>javascript">export default {props: {title: {type: String,default: ''},isBack: { // 是否显示返回按钮type: Boolean,default: true},isOverlay: { // 是否遮罩页面上(不占位)type: Boolean,default: false},customUrl: { // 自定义跳转地址type: String,default: ''},pageType: { // 跳转方式type: String,default: 'navigateTo'}},methods: {customBack (callback) {if (this.customUrl) {uni[this.pageType]({url:this.customUrl })return}const pages = getCurrentPages()if (callback) {callback()}else  {if(pages.length === 1) {history.back()}	else {uni.navigateBack()}}}}}</script><style lang="scss" scoped>.overlay{::v-deep {.u-navbar-fixed{background: transparent !important;}.u-navbar-placeholder{display: none;}}}</style>

http://www.ppmy.cn/server/24016.html

相关文章

Unreal Engine添加UGameInstanceSubsystem子类

点击C类文件夹&#xff0c;在右边的区域点击鼠标右键&#xff0c;在弹出的菜单中选择“新建C类”在弹出的菜单中选中“显示所有类”&#xff0c;选择GameInstanceSubsystem作为父类, 点击“下一步”按钮输入子类名称“UVRVIUOnlineGameSubsystem”&#xff0c;选择插件作为新类…

[激光原理与应用-91]:不同焦距的透镜对成像效果的影响:光斑大小、公差要求、成像效果、视角

目录 一、凸透镜的工作原理 1.1 凸透镜对平行光的聚焦作用 1.2 凸透镜的成像原理 二、不同的凸透镜焦距对视角的影响 三、透镜不同焦距对焦斑的影响 四、透镜不同焦距对镜片与焦点距离的影响 五、透镜不同焦距对公差的要求 六、球差、色差、相差、景深的影响 6.1 球差…

商城数据库(73-76)

73——店铺角色表&#xff08;wang_shop_roles&#xff09; CREATE TABLE wang_shop_roles (id int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,shopld int(11) DEFAULT 0 COMMENT 店铺ID,roleName varchar(100) DEFAULT NULL COMMENT 角色名称,privilegeMsgs text COMMENT …

关于发布 npm 包镜像库,马上 pnpm 安装报未找到版本的问题?

关于发布 npm 包镜像库&#xff0c;马上 pnpm 安装报未找到版本的问题&#xff1f; 背景&#xff1a;我们在发布共有 npm 包时&#xff0c;npm 官方镜像发布成功&#xff0c;但是淘宝源下载却没有找到刚发布的版本&#xff0c;下面是我遇到问题心路历程 文章目录 关于发布 npm…

5-用户权限控制(前端)

1.登录成功后&#xff0c;调用状态管理中对应的设置菜单的方法 //调用store中的setMenu函数 this.$store.commit(setMenu,data.data.data)2.将后端返回的菜单数据存入Cookie中 //设置菜单的方法setMenu(state, val) {state.menu valCookie.set("menu", JSON.strin…

大象机器人开源协作机械臂myCobot 630 全面升级!

1. 开篇概述 在快速发展的机器人技术领域中&#xff0c;Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂&#xff0c;myCobot 600以其600mm的工作半径和2kg的末端负载能力&#xff0c;满足了多样化的操作需求。…

Java NIO

1. IO分类概述 1.1 阻塞与非阻塞 阻塞&#xff08;Blocking&#xff09;和非阻塞&#xff08;Nonblocking&#xff09;是在计算机编程中用于描述I/O操作的两个重要概念。阻塞与非阻塞描述的是线程在访问某个资源时&#xff0c;在该资源没有准备就绪期间的处理方式。 1、阻塞&a…

解决Oracle锁表的方法

在实际工作中&#xff0c;并发量比较大的项目&#xff0c;经常会出现锁表的问题&#xff0c;下面我将复现这个问题&#xff0c;并给出解决方法。 一、问题复现 1、session1修改aabb表的B字段为迪迦奥特曼&#xff0c;但是不提交该事务。 2、session2也修改这行的这个字段。 发…