taro-vue3监听左滑/右滑手势退出

2023-11-12

一.业务背景

我做的是一个要货小程序,没有华丽的页面,没有购物车,就是在要货页面填写要货数量,然后跳转到预览页面。预览页面有保存和支付按钮。可以先点保存,再点支付。也可以直接点支付,支付的同时进行保存。

问题:支付成功后直接跳转回菜单页面,但是保存后会停留在预览页面,毕竟还有个支付按钮可以点。问题就在这了,保存成功后点回退页面,不应该再回到要货页面,而应该回到菜单页面。

二.解决过程

1.第一步,我在预览页面做了自定义头部导航栏,根据订单号是否为空,来判断是跳回一个页面,还是跳回菜单页面。因为保存之后就有订单编号了,而保存之前,订单号为空。如果订单号为空的话,用户是可以返回到要货页面修改要货产品和数量 。我本以为这样就解决问题了,因为我自己测试正常。结果让产品一测试,产品说,点导航栏回退没有问题,但是左滑或右滑退出页面的效果还是不对。

<at-nav-bar
      :border="false"
      class="demo-nav-bar"
      color="#333"
      leftText="预览"
      leftIconType="chevron-left"
      @click-left-icon="handleBackClick()"
    />

function handleBackClick() {
      if(state.orderId == "") {
        Taro.navigateBack({
          delta: 1
        });
      } else {
        Taro.switchTab({ url: "/pages/menu/index" });
      }
    }

2.我就开始想这个左滑右滑手势的问题,首先我同事给我发了一个禁用左滑右滑的属性,我查了一下,发现这个公告,这个属性已经不支持了。

3.我又在百度上搜索怎么小程序怎么监听左滑手势,找到了如下资料,用几个touch事件计算鼠标移动长度来判断是不是要滑出页面。

微信小程序监听手势左右滑动_小居米的博客-CSDN博客_小程序监听左右滑动

 然而不知道是我属性没写对,还是什么,因为vue中属性的名称和原生小程序是有差别的。总之这几个touch事件我加了没有看到效果。

4.接着我又搜到了有人说onAppHide这个事件可以。我试了一下,可能用法不对,反正它既没报错,也没有效果。

 5.我都快绝望了,觉得是不是要让产品改交互。我又重新找,不放过每一条可能有用的信息,然后找到了vuejs的官方API,还是全英文的。我觉得上面的第3步几个touch事件应该是靠点谱的,不然怎么那么多人都那么写呢。我就尝试在vuejs的官方API里搜索touch,还真的找到了有点沾边的一个事件:onUnmounted。

用这个事件至少在离开页面的时候有效果,控制台能打印出离开页面。但是,这个事件似乎会关闭掉所有页面,直接回到菜单页,也就是app.config.ts里面配置的第一个页面。这可不是我想要的效果。

vuejs的官方API:

Composition API: Lifecycle Hooks | Vue.js

6.于是我又试图寻找其他的钩子函数,比如componentWillMount ,componentDidMount 等,非但不起作用,还报错。这应该是因为这两个钩子函数是属于react,而不是vue的。

7.我只好把希望重新寄托在onUnmounted钩子函数上,这毕竟是我找到的唯一有效果的方法了。但是这个事件会关掉所有的页面。我该怎么办呢。这时候快到晚上八点半了,如果不准备休息,又会影响第二天的精力分配。我一向支持,工作要知道何时停止,停止是比开始更难控制的事。在代码世界里犹其这样,很多时候一种效果没有实现,就会不甘心地一直试试试。然而越浮躁,结果总是越漫长。

8.晚上我一边刷牙一边想到,既然navigateBack不行,那怎么不试试跳转navigateTo直接跳去想去的页面,至于页面上应该保留的参数,可以试试传参。

第二天,我就按这个思路试了一下。我一边试自己的小程序,一边看别人的小程序,最近社区买东西都用快团团。我就在快团团上点进去退出来,看着别人的小程序怎么退出页面的效果如此平滑,而且页面上的数据不论是关掉小程序还是从哪个页面返回,加入购物车的数据始终存在。那它肯定用了缓存了,肯定把数据存在全局变量了。对呀,存在全局变量,比我在页面间传参传来传去要简便一些。传参我自己都绕晕了。

最后,我用navigateTo或者redirectTo,跳转页面非常不平滑,有明显地重新打开页面的痕迹。我就试了一下switchTab,本来以为用switchTab要把页面变成tabBar里包含的页面,没想到不需要。直接用就可以了。switchTab进行页面的效果很平滑,看不出来有重新打开页面的痕迹。

而且onUnmounted还有一个好处,就是它不仅能够监听到左滑/右滑手势退出页面,也能监听到点头部导航栏返回上一页面。所以我去掉了自定义头部导航栏。

三.总结

vue3监听页面退出的钩子函数是onUnmounted,它能监听到以任何方式退出页面的事件。知道这一点,我们就能在这个函数里实现任何想做的操作。

具体用法如下:

import { toRefs, reactive, defineComponent, onMounted ,onUnmounted } from "vue";

onUnmounted (() => {
      console.log("退出预览页面");
      if(state.orderId == "") {
        Taro.switchTab({ url: `/pages/goods/index?type=1` });
      } else {
        Taro.switchTab({ url: "/pages/menu/index" });
      }
    })

对了,我还传了一个type参数用来区分,是首次进入要货页面,还是从预览页面退回的要货页面。

这点也很重要,这点决定了是否加载已经选中的物料及其数量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

taro-vue3监听左滑/右滑手势退出 的相关文章

随机推荐

  • vue 微信分享

    场景 一个h5界面要求点击右上角三个点后点击微信好友分享带标题和图片给好友 vue项目中 分享携带头部标题 简介和缩略图等信息 1 下载微信的 weixin js sdk npm install weixin js sdk 2 在需要分享的
  • 顺序表的逆置算法

    顺序表的逆置算法 1 逆置原理 2 算法实现 3 经典例题1 4 经典例题2 1 逆置原理 顺序表的逆置即将线性表 a1 a2 a3 an 转化为 an an 1 an 2 a2 a1 此操作在程序设计中经常使用 2 算法实现 includ
  • 第十四届蓝桥杯(第三期)模拟赛试题与题解 C++

    第十四届蓝桥杯 第三期 模拟赛试题与题解 C 试题 A 问题描述 请找到一个大于 2022 的最小数 这个数转换成十六进制之后 所有的数位 不含前导 0 都为字母 A 到 F 请将这个数的十进制形式作为答案提交 答案提交 这是一道结果填空的
  • 使用腾讯云clb实现https转发

    腾讯云clb实现https进行转发 七层反代 四层负载均衡和七层负载均衡有什么区别 四层均衡能力 是基于 IP 端口的负载均衡 七层是基于应用层信息 如 HTTP 头部 URL 等 的负载均衡 四到七层负载均衡 就是在对后台的服务器进行负载
  • SpringBoot读取配置文件的两种方式以及自定义配置文件的读取

    1 读取默认配置文件中的数据 application properties 直接使用 Value注解获取数据 2 使用Environment获取数据 防止乱码统一编码格式 注入Environment 使用getProperty获取数据 3
  • UE4 Actor生命周期 SpawnActor DestroyActor剖析

    原创文章 转载请注明出处 AActor很重要 只要是我们世界大纲列表内的物体 全部都是AActor 目录 第一部分 从编辑器点击Play开始分析World里面全部的Actor的Spawn流程 分析到调用BeginPlay结束 1 gt 下面
  • Effective java 总结10-并发

    Effective java 总结10 并发 第78条 同步访问共享的可变数据 Synchronized 可以保证在同一时刻 只有一个线程可以执行某一个方法 或者某一个代码块 同步可以阻止一个线程看到对象处于不一致的状态中 还可以保证进入同
  • mysql 5.7的jdbc驱动_高版本MySQL(5.7,5.8)的JDBC连接新问题

    在使用JDBC连接访问MySQL时一般要使用对应版本的驱动 比如我使用了8 0 11版本的MySQL 对应驱动的Maven描述为 1 2 mysql 3 mysql connector java 4 8 0 11 5 然后遇到了驱动问题 S
  • Python 自动化处理 Yaml 文件

    1 Yaml 是什么 Yaml是一种简洁的非标记语言 Yaml是一个可读性高 用来表达数据序列化的格式 Yaml以数据为中心 使用空白 缩进 分行组织数据 从而使得表示更加简洁 Yaml特别适合用来表达或编辑数据结构 各种配置文件 文件大纲
  • Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted

    一般为数组越界 查看一下数组大小
  • 算力军备竞赛白热化 “卖铲人”联想集团竞争力如何?

    继微软通过OpenAI推出GPT系列 谷歌推出Bard和PaLM E2之后 国内AI大模型也呈百家争鸣态势 年初至今 国内科技巨头几乎都发布了自研AI大模型产品 AI竞赛全面升级的背后 是全球科技巨头们对算力的争夺 作为算力载体的AI服务器
  • 使用Docker+Jenkins+Gitee自动化部署SpringBoot项目

    目录 搭建基础环境 1 使用Docker Compose搭建基础环境 2 搭建项目仓库环境 创建Dockerfile文件 2022 12 15更新 3 配置Jenkins 3 1 初始化Jenkins 3 2 安装核心插件 3 3 全局工具
  • 学习笔记1——常用的注意力机制(即插即用)

    在目标检测网络里加注意力机制已经是很常见的了 顾名思义 注意力机制是指在全局图像中获得重点关注的目标 常用的注意力机制有SE CA ECA CBAM GAM NAM等 1 SE模块 论文 https arxiv org pdf 1709 0
  • 【论文阅读】LASOR: Learning Accurate 3D Human Pose and Shape Via Synthetic Occlusion-Aware Data and Neural

    1 环境配置上 1 1 报错 1 1 1 opencv cv2 error OpenCV 4 6 0 error 5 Bad argument in function circle Overload resolution failed Ca
  • Flutter层叠布局 Stack、Positioned

    Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位 Stack允许子组件堆叠 而Positioned用于根据Stack的四个角来确定子组件的位置 Stack alignment 此参数决定如何去对齐没有定位 没
  • FiddlerCore HTTPS 证书每次都需要创建的问题

    FiddlerCore HTTPS 证书每次都需要创建的问题 问题描述 我使用FiddlerCore来抓取HTTPS数据 需要安装证书 使用以下代码进行安装 安装证书 public static bool InstallCertificat
  • python读取mongoDb数据库保存到Excel CSV中

    import xlwt import pymongo import pandas as pd import xlsxwriter as xw 连接mongodb数据库 client pymongo MongoClient localhost
  • 防火墙安全策略&&防火墙安全区域的划分

    给两台PC任意设置两个网段 并划分好trust和untrust区域 利用默认账号密码登录 账号 admin密码 Admin 123 然后自行随意修改密码 给防火墙的两个接口配上对应地址并放行 两个接口进行同样的操作 这个时候还是不能够通信
  • API接口设计规范

    说明 在实际的业务中 难免会跟第三方系统进行数据的交互与传递 那么如何保证数据在传输过程中的安全呢 防窃取 除了https的协议之外 能不能加上通用的一套算法以及规范来保证传输的安全性呢 下面我们就来讨论下常用的一些API设计的安全方法 可
  • taro-vue3监听左滑/右滑手势退出

    一 业务背景 我做的是一个要货小程序 没有华丽的页面 没有购物车 就是在要货页面填写要货数量 然后跳转到预览页面 预览页面有保存和支付按钮 可以先点保存 再点支付 也可以直接点支付 支付的同时进行保存 问题 支付成功后直接跳转回菜单页面 但