微信小程序中跨页面调用函数来刷新页面的方法

 更新时间:2025年06月17日 11:30:18   作者:aiee  
在微信小程序中,不同页面之间的通信和状态管理是常见需求,比如:详情页数据更新,要刷新列表页数据,下面介绍几种在Page中调用另一个Page函数或刷新页面的方法,感兴趣的朋友一起看看吧

在微信小程序中,不同页面之间的通信和状态管理是常见需求,比如:详情页数据更新,要刷新列表页数据。下面介绍几种在 Page 中调用另一个 Page 函数或刷新页面的方法:

方法一:使用全局变量和 App 实例

可以通过 App 实例的 globalData 存储全局变量,或在 App 实例上定义方法:

// app.js
App({
  globalData: {
    userInfo: null,
    needRefresh: false
  },
  // 全局方法
  refreshHomePage() {
    this.globalData.needRefresh = true
  }
})

然后在目标页面检查这个标志并执行刷新:

// pages/home/home.js
Page({
  data: {
    list: []
  },
  onShow() {
    const app = getApp()
    // 检查是否需要刷新
    if (app.globalData.needRefresh) {
      this.loadData()
      app.globalData.needRefresh = false
    }
  },
  loadData() {
    // 重新加载数据
    console.log('刷新页面数据')
  }
})

在源页面触发刷新:

// pages/detail/detail.js
Page({
  data: {},
  backAndRefresh() {
    // 调用App实例的方法
    const app = getApp()
    app.refreshHomePage()
    // 返回上一页
    wx.navigateBack()
  }
})

方法二:使用页面栈(Page Stack)

微信小程序提供了getCurrentPages()方法获取当前页面栈,可以直接操作栈中的页面:

// 刷新上一个页面
refreshPrevPage() {
  // 获取当前页面栈
  const pages = getCurrentPages()
  if (pages.length >= 2) {
    // 获取上一个页面实例
    const prevPage = pages[pages.length - 2]
    // 直接调用上一个页面的方法
    if (typeof prevPage.refreshData === 'function') {
      prevPage.refreshData()
    }
  }
  // 返回上一页
  wx.navigateBack()
}

方法三:使用事件总线(Event Bus)

创建一个全局事件总线来处理跨页面通信:

// utils/event-bus.js
class EventBus {
  constructor() {
    this.events = {}
  }
  // 注册事件监听
  on(event, callback) {
    if (!this.events[event]) {
      this.events[event] = []
    }
    this.events[event].push(callback)
  }
  // 触发事件
  emit(event, data) {
    if (this.events[event]) {
      this.events[event].forEach(callback => callback(data))
    }
  }
  // 移除事件监听
  off(event, callback) {
    if (this.events[event]) {
      this.events[event] = this.events[event].filter(cb => cb !== callback)
    }
  }
}
// 导出单例
export default new EventBus()

在目标页面监听事件:

// pages/home/home.js
import eventBus from '../../utils/event-bus'
Page({
  data: {
    list: []
  },
  onLoad() {
    // 注册事件监听
    eventBus.on('refresh', this.refreshData)
  },
  onUnload() {
    // 移除事件监听,防止内存泄漏
    eventBus.off('refresh', this.refreshData)
  },
  refreshData() {
    // 刷新数据
    console.log('收到刷新事件')
    this.loadData()
  },
  loadData() {
    // 加载数据的逻辑
  }
})

在源页面触发事件:

// pages/detail/detail.js
import eventBus from '../../utils/event-bus'
Page({
  data: {},
  triggerRefresh() {
    // 触发刷新事件
    eventBus.emit('refresh')
    // 返回上一页
    wx.navigateBack()
  }
})

推荐使用方式

对于简单场景,推荐使用方法一(全局变量)或方法二(页面栈),实现简单直接。

对于复杂场景,特别是多个页面需要通信的情况,推荐使用方法三(事件总线),它提供了更灵活的解耦方式。

无论使用哪种方式,都要注意内存管理,避免在不需要监听时仍然保留事件监听,导致内存泄漏。

到此这篇关于微信小程序中跨页面调用函数来刷新页面的文章就介绍到这了,更多相关微信小程序刷新页面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript转换数据库DateTime字段类型方法

    JavaScript转换数据库DateTime字段类型方法

    下面小编就为大家带来一篇JavaScript转换数据库DateTime字段类型方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 一个JavaScript用逗号分割字符串实例

    一个JavaScript用逗号分割字符串实例

    分割字符串的方法有很多,这篇文章主要介绍了一个JavaScript用逗号分割字符串实例,需要的朋友可以参考下
    2014-09-09
  • js实现页面跳转的五种方法推荐

    js实现页面跳转的五种方法推荐

    下面小编就为大家带来一篇js实现页面跳转的五种方法推荐。小编觉得挺不错的。现在分享给大家。给大家参考一下。
    2016-03-03
  • 基于javascript实现全国省市二级联动下拉选择菜单

    基于javascript实现全国省市二级联动下拉选择菜单

    这篇文章主要介绍了基于javascript实现全国省市二级联动下拉选择菜单,以一个完整实例形式较为详细的分析了js实现省市二级联动下拉菜单的实现技巧,非常简单实用,需要的朋友可以参考下
    2016-01-01
  • uniapp使用webview嵌入vue页面及通信实现方式

    uniapp使用webview嵌入vue页面及通信实现方式

    项目中有需要嵌入其他H5的页面的业务需求,这篇文章主要给大家介绍了关于uniapp使用webview嵌入vue页面及通信实现方式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • uni-app 中清除定时器实现方法详解

    uni-app 中清除定时器实现方法详解

    这篇文章主要为大家介绍了uni-app 中清除定时器实现方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 微信小程序实现活动报名登记功能(实例代码)

    微信小程序实现活动报名登记功能(实例代码)

    这篇文章主要介绍了微信小程序实现活动报名登记,本篇将介绍使用微信小程序实现发起一个活动报名的设计,以此为基础,我们可以掌握微信小程序表单的基本用法,进而在诸如疫情信息登记、出入报备等场景中使用小程序进行开发,满足相关的需求,需要的朋友可以参考下
    2022-09-09
  • javascript断点调试心得分享

    javascript断点调试心得分享

    javascript中程序是怎么可以中断执行,然后一步一步走下去。而且debug的时候,可以看到变量,调用栈等东西。这个是如何实现的?
    2016-04-04
  • JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】

    JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】

    这篇文章主要介绍了JavaScript语法高亮库highlight.js用法,详细分析了highlight.js的下载、调用及具体使用技巧,需要的朋友可以参考下
    2016-11-11
  • js实现div弹出层的方法

    js实现div弹出层的方法

    这篇文章主要介绍了js实现div弹出层的方法,以实例的形式完整的实现了js弹出div层的效果,并且弹出层可拖拽、可关闭,用户还可根据个人喜好自定义弹出层的显示效果,非常具有实用价值,需要的朋友可以参考下
    2014-11-11

最新评论