uni-app -移动端H5小程序 关闭当前页,返回上一页并调用上一页的方法

这篇具有很好参考价值的文章主要介绍了uni-app -移动端H5小程序 关闭当前页,返回上一页并调用上一页的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个平台找到我!
🏆 本文收录于专栏: uniapp踩坑指南
🔥 专栏介绍: 本专栏提供了uni-app开发过程中必不可少的组件和解决方案。本书详细介绍了各种常用组件的使用方法和技巧,以及如何应对uniapp开发中遇到的各种问题。

移动端关闭当前页面,uniapp踩坑指南,uni-app,小程序,前端,ios,android

场景

假设我们有A和B两个页面,A页面是一个列表,B页面是从A页面点击某个列表项进入的,当我们在B页面操作完之后,需要返回A页面,此时需要刷新A页面的数据。

方法1:getCurrentPages

介绍

在uni-app中,getCurrentPages()方法用于获取当前页面栈的实例数组。页面栈是指打开的页面的层级关系,当前页面在数组中的索引为pages.length - 1,上一页在数组中的索引为pages.length - 2,以此类推。

getCurrentPages()方法返回的是一个页面栈数组,数组中的每个元素都是一个页面实例,包含了页面的数据和方法。通过获取页面栈数组,我们可以根据索引获取到上一页的实例,然后可以调用上一页的方法或访问上一页的数据。

具体流程如下:

  1. 调用getCurrentPages()方法获取当前页面栈的实例数组:
var pages = getCurrentPages();
  1. 使用pages.length - 2获取上一页的索引,然后通过pages[beforePage]获取上一页的实例:
var beforePage = pages[pages.length - 2];
  1. 通过上一页的实例,可以访问上一页的数据和方法,例如:
beforePage.data // 可以访问上一页的数据
beforePage.method() // 可以调用上一页的方法

通过以上步骤,我们可以获取到上一页的实例,并进行相应的操作。这样就可以实现在当前页返回上一页并刷新数据的功能。

代码演示

  1. 在A页面的methods中,编写获取数据的逻辑。
<script>
export default {
  data() {
    return {
      dataList: [] // A页面的数据列表
    }
  },
  methods: {
    getData() {
      // 发送请求获取数据,并更新dataList
    }
  }
}
</script>
  1. 在A页面的列表项上添加点击事件,跳转到B页面,并传递需要的参数。
<template>
  <view>
    <!-- A页面的列表 -->
    <view v-for="(item, index) in dataList" :key="index" @click="goToB(item)">
      <!-- 列表项的内容 -->
    </view>
  </view>
</template>

<script>
export default {
  methods: {
    goToB(item) {
      uni.navigateTo({
        url: '/pages/BPage?id=' + item.id // 跳转到B页面,并传递参数
      })
    }
  }
}
</script>
  1. 在B页面中,完成相应的操作后,通过uni.navigateBack方法返回A页面。
<script>
export default {
  methods: {
    goBack() {
      
        var pages = getCurrentPages();
        var beforePage = pages[pages.length - 2];

        
        uni.navigateBack({
            success: function() {
                beforePage.getData();
            }
        });
         
         
    }
  }
}
</script>

这样,当点击返回按钮时,会返回上一页并调用上一页的getData函数来刷新数据。

报错not a function?请注意!!!

在uni-app中是适配多端的,beforePage.getData();只在h5中有效,在app端和微信小程序端都会报错 getData not a function;

在APP端和微信小程序需要加上

beforePage.$vm.

修改后完整的代码如下

var pages = getCurrentPages();
var beforePage = pages[pages.length - 2];

uni.navigateBack({
    success: function() {
        // #ifdef H5
        beforePage.getData()
        // #endif
        // #ifndef H5
        beforePage.$vm.getData()
        // #endif
    }
});
         

注意2:Android端执行之后报Cannot read property ‘$vm’ of undefined

在完成代码编写后,保存并重新加载软件后,上一页已经不存在了。此时,只需要退出软件并重新进入即可解决问题。

方法2 :onshow

介绍

onshow属于uni-app的页面生命周期: 监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面

onshow是一个会重复触发的事件。a页面刚进入时,会触发a页面的onShow。从其他页面跳转或者返回a页面,会再次触发onShow。

移动端关闭当前页面,uniapp踩坑指南,uni-app,小程序,前端,ios,android

代码演示

  1. 在A页面的onShow生命周期函数中,编写获取数据的逻辑。这样每次返回A页面时都会重新获取最新的数据。
<script>
export default {
  data() {
    return {
      dataList: [] // A页面的数据列表
    }
  },
  onShow() {
    // 获取数据的逻辑,例如发送请求获取最新数据
    this.getData()
  },
  methods: {
    getData() {
      // 发送请求获取数据,并更新dataList
    }
  }
}
</script>
  1. 在A页面的列表项上添加点击事件,跳转到B页面,并传递需要的参数。
<template>
  <view>
    <!-- A页面的列表 -->
    <view v-for="(item, index) in dataList" :key="index" @click="goToB(item)">
      <!-- 列表项的内容 -->
    </view>
  </view>
</template>

<script>
export default {
  methods: {
    goToB(item) {
      uni.navigateTo({
        url: '/pages/BPage?id=' + item.id // 跳转到B页面,并传递参数
      })
    }
  }
}
</script>
  1. 在B页面中,完成相应的操作后,通过uni.navigateBack方法返回A页面。
<script>
export default {
  methods: {
    goBack() {
      // 完成操作后返回A页面
      uni.navigateBack({
        delta: 1 // 返回的页面数,如果是返回上一级页面,delta为1
      })
    }
  }
}
</script>
  1. 在A页面的onShow生命周期函数中,重新获取数据,以刷新A页面的数据。

通过以上步骤,当从B页面返回A页面时,A页面的onShow生命周期函数会被触发,重新获取数据并刷新页面。这样就实现了从B页面返回A页面并刷新A页面数据的功能。

缺点

虽然onShow生命周期函数在实现从B页面返回A页面并刷新数据的功能时非常方便,但也存在一些缺点:

  1. 不适用于首次加载:onShow生命周期函数在页面每次显示时都会触发,包括首次加载和从其他页面返回。如果A页面是首次加载时需要获取数据,onShow生命周期函数会在每次返回A页面时都触发获取数据的逻辑,导致数据重复获取和页面重复刷新。

  2. 无法传递参数:onShow生命周期函数没有参数传递的机制,无法在返回A页面时传递参数给onShow函数,因此无法根据传递的参数来决定是否需要刷新数据,或者刷新哪些数据。

  3. 页面切换时性能开销:在返回A页面时,onShow生命周期函数会被触发,这可能会导致页面在切换时出现短暂的卡顿或延迟,特别是当A页面的数据量较大或需要进行复杂的数据处理时。

  4. 无法精确控制刷新时机:onShow生命周期函数的触发时机是在页面显示时,无法精确控制刷新数据的时机。如果需要在B页面完成某个操作后立即刷新A页面的数据,使用onShow生命周期函数无法满足需求。

综上所述,虽然onShow生命周期函数在一些简单的场景下可以方便地实现从B页面返回A页面并刷新数据,但在复杂的场景下可能存在一些缺点和不足。在实际开发中,可以根据具体需求选择合适的数据刷新方案,例如使用事件总线、vuex等来进行数据传递和管理,或者使用自定义的生命周期函数来实现更精确的控制。文章来源地址https://www.toymoban.com/news/detail-753514.html

到了这里,关于uni-app -移动端H5小程序 关闭当前页,返回上一页并调用上一页的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app移动端-H5-微信小程序下载保存图片,文档和视频到手机,带进度条

    可移步插件地址,可直接导入hbuilderx示例项目查看: uni-app移动端-H5-微信小程序下载保存图片,文档和视频到手机,带进度条 具体代码如下

    2024年02月13日
    浏览(40)
  • uni-app(微信小程序)获取当前位置uni.getLocation

     1、微信公众平台  开发  开发管理   2、开通之后到项目文件    3、下载腾讯地图插件并引入到文件中    

    2024年02月11日
    浏览(67)
  • uni-app如何区分 app、h5、小程序代码; uni-app如何判断是android、ios、小程序

    uniapp是DCloud公司于2012年开始研发的能够一次代码开发,生成H5、小程序(微信、支付宝、百度、华为等)、APP等应用的技术的统称,开发工具是HBuilderX,功能非常强大,由此引申出许多技术社区与生态环境。 使用HBuilderX开发Uniapp程序的项目,用它生成多端应用,由于兼容各种

    2024年02月11日
    浏览(75)
  • 前后端分离项目,vue+uni-app+php+mysql电影院售票系统(H5移动项目) 开题报告

      毕业论文 基于Vue.js电影院售票系统(H5) 开题报告 学    院:                        专    业:                          年    级:                         学生姓名:                        指导教师:       黄菊华  

    2024年02月07日
    浏览(52)
  • uni-app - App 平台内嵌网页物理手机自带返回键失效解决方案(内嵌的 webview 网页 H5 打包后手机物理返回键无效直接退出应用了)

    当您需要打包 App(*.apk) 平台时,发现内嵌的 H5 页面虽然可以正常显示与运行,但是手机的物理返回键却无法使用,当点击手机物理返回按键(或手势)时,直接显示 “再按一次退出应用”,而 并非返回上一个\\\"网页\\\"。 出现这种情况的原因是, 内嵌的网页与您的 App “毫无

    2024年02月09日
    浏览(87)
  • uni-app 微信小程序 保存当前页面为图片

    由于在微信小程序环境下面没法获取dom,很多方法都很难去实现保存html结构的页面,比较有效的#painter 可以不需要操作dom,但是那玩意儿和重新用js写个页面一样,简单的页面还好,复杂的,元素比较多的就很麻烦,所以考虑用webview+html2canvas来完成 先说一下思路,既然在微

    2024年02月11日
    浏览(55)
  • uni-app滚动分页 兼容(App 小程序 H5)

    因为手机端本身屏幕空间不大 所以大家一般都会选择用滚动分页 首先 我在根目录下创建了一个 api目录 下面创建了一个bookApi.js 其中写了一个请求函数 getBookList 根据当前页 page 和 每页展示多少条 pageSize 获取数据 那么 我的组件代码是这样的 首先 我们肯定要引入bookApi.js中的

    2024年02月16日
    浏览(62)
  • uni-app小程序刷新当前页面的两种方法

    方法一 wx.relaunch来刷新当前页面,页面会被重载,若路由携带参数需自行拼接,方法如下 (如果用电脑打开小程序,该方法有bug) 上面是获取页面路由和参数的方法,具体使用如下 方法二(推荐) 通过获取该页面实例执行其内部的生命周期方法来刷新页面

    2024年02月12日
    浏览(55)
  • uni-app实现 app 小程序 手机端H5扫码功能

    首先 扫码这个功能小程序和App都是有现成的方法 但是H5是不行的 我们可以看这样一段代码 这里 我们用了条件编译 App和小程序中的代码是 一样的 他们都可以正常执行scanCode进行扫码 至于H5手机端界面 我用web-view套了个百度的链接进来 其实 大家可以参考我的文章 vue实现二维

    2024年02月11日
    浏览(63)
  • uni-app | 小程序嵌入H5页面实现支付功能

    前一阵在做公司小程序时,有个需要对接支付的功能。但是本着订单数据和支付统一入口的设计原则,计划是对接公司商城现有的支付体系。故本方案是分析对接商城支付几种可行方案以及每种方案的可行性,最后综合选出一种最佳的方案。 实现方式 跳转商城小程序支付 跳

    2024年02月07日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包