mui.back()返回刷新功能

本文介绍了一个具体的场景下,如何在子页面使用mui.back()返回父页面时触发父页面的刷新。通过注册beforeback方法并利用plus.webview API,实现子页面(如登录页)返回时对父页面状态的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档链接:http://dev.dcloud.net.cn/mui/window/#closewindow

http://www.dcloud.io/docs/api/zh_cn/webview.html----->HTML5+API Reference

学习链接:http://ask.dcloud.net.cn/docs/

使用场景:操作某个步骤需要获取用户信息,如果用户未登陆,则跳转登录页面,登陆成功之后使用mui.back()返回父页面,父页面必须刷新。

子页面:登陆页

父页面:跳转登录页的页面

1. 在子页面初始化时,注册beforeback方法;

mui.init({
    beforeback: function() {
     //获得父页面的webview
        var list = plus.webview.currentWebview().opener();
     //触发父页面的自定义事件(refresh),从而进行刷新
        mui.fire(list, 'refresh');
        //返回true,继续页面关闭逻辑
        return true;
    }
});

2.在父页面中添加事件监听:

window.addEventListener('refresh', function(e){//执行刷新
    location.reload();
});

这样,在子页面执行返回操作mui.back()时,会执行父页面的refresh事件。

转自:http://www.cnblogs.com/007sx/p/6580135.html



总结-->下面是自己在做东西时,遇到的问题:

1、plus.webview.currentWebview().opener();换成plus.webview.getElementById("父页面的id"),就不行,目前布吉岛为啥

//获得父页面的webview
var list = plus.webview.currentWebview().opener(); // 获取当前Webview窗口的创建者
与
var list=plus.webview.getElementById("父页面的id");的区别
解析:

WebviewObject plus.webview.currentWebview();获取当前窗口的WebviewObject对象

var list = plus.webview.currentWebview().opener(); // 获取当前Webview窗口的创建者,创建者为调用plus.webview.open或plus.webview.create方

法创建当前窗口的Webview窗口。

plus.webview.getElementById("父页面的id"),查找指定标识的WebviewObject窗口.

<think>好的,我现在需要帮助用户了解如何在HBuilder中实现页面刷新功能。用户提到参考了两个引用,其中引用[2]讨论了页面传值和预加载的问题,可能涉及到页面间数据更新。首先,我应该回忆HBuilder中常用的页面刷新方法,尤其是结合mui框架的特性。 首先,HBuilder基于mui框架,常用于移动应用开发。页面刷新通常涉及数据更新和UI重新渲染。常见的场景包括从详情页返回列表页时更新数据,或者用户登录后刷新多个页面。根据引用[2]中的例子,比如预加载的详情页需要更新,或者订单列表在下单后自动刷新,这些都需要特定的方法来实现。 接下来,我需要整理几种常用的页面刷新方法。第一种可能是使用mui.fire()方法触发目标页面的自定义事件,从而调用刷新函数。例如,从详情页返回时触发列表页的刷新事件。第二种方法是在页面显示时检查数据变化,可以利用mui的页面显示事件,如pageshow事件,在每次页面显示时检查是否需要刷新数据。第三种是使用本地存储(如localStorage)来标记需要刷新的状态,当页面加载时检查该标记并执行刷新。第四种可能是直接调用location.reload(),但这可能影响用户体验,因为会重新加载整个页面,导致闪烁。 然后,我需要考虑这些方法的具体实现步骤,并给出代码示例。比如,使用mui.fire()时,需要获取目标页面的webview对象,然后触发自定义事件,目标页面需要监听该事件并执行数据刷新。对于pageshow事件,需要在目标页面的初始化函数中添加事件监听,当页面显示时执行数据加载。使用localStorage的话,可以在数据变化时设置标志,然后在目标页面的onload或pageshow事件中检查该标志并刷新。 此外,需要注意HBuilder中页面传值的机制,比如通过扩展参数或在页面初始化时传递参数。例如,在打开新页面时传递参数,新页面关闭时返回数据,父页面在接收数据时更新UI。这可能涉及到mui.openWindow和mui.back方法的结合使用,以及自定义事件的监听。 还需要考虑用户体验的问题,比如避免频繁的整个页面刷新,而是局部更新数据,减少性能消耗。因此,推荐使用局部刷新方法,比如通过JavaScript动态更新DOM元素的内容,而不是重新加载整个页面。 最后,根据引用[2]中的情况,比如用户登录后需要刷新多个页面,可能需要更全局的状态管理,比如使用全局变量或更复杂的发布-订阅模式来通知各个页面进行刷新。但考虑到用户可能更需要基础的方法,应该优先介绍常用的几种方式,并给出实际代码示例,帮助用户快速实现功能。</think>在HBuilder中实现页面刷新功能,可以通过以下方法结合`mui`框架特性完成: --- ### 一、通过`mui.fire()`触发目标页面刷新 **适用场景**:从子页面(如详情页)返回时更新父页面(如列表页)数据。 **实现步骤**: 1. **父页面监听自定义事件** 在列表页初始化时注册事件监听: ```javascript mui.plusReady(function() { var currentPage = plus.webview.currentWebview(); currentPage.addEventListener('refreshList', function() { loadData(); // 自定义数据加载函数 }); }); ``` 2. **子页面触发事件** 在详情页关闭前触发父页面的自定义事件: ```javascript mui.back = function() { var listPage = plus.webview.getWebviewById('list.html'); mui.fire(listPage, 'refreshList'); mui.currentWebview().close(); } ``` --- ### 二、利用`pageshow`事件自动刷新 **适用场景**:每次页面显示时检查数据更新(如用户登录后)。 **实现代码**: ```javascript mui.init({ beforeback: function() { // 返回前标记需要刷新 localStorage.setItem('needRefresh', 'true'); return true; } }); // 页面显示时检查刷新标记 window.addEventListener('pageshow', function(event) { if (localStorage.getItem('needRefresh') === 'true') { loadData(); localStorage.removeItem('needRefresh'); } }); ``` --- ### 三、通过URL参数强制刷新页面 **适用场景**:需要完全重新加载页面时(慎用,可能影响体验)。 **实现方式**: ```javascript // 在原URL后添加时间戳参数 location.href = location.href + '?t=' + new Date().getTime(); ``` --- ### 四、局部DOM刷新(推荐) **适用场景**:仅更新部分数据,避免整页刷新。 **示例代码**: ```javascript function refreshUserInfo() { mui.ajax('/api/user', { success: function(data) { document.getElementById('username').innerHTML = data.name; document.getElementById('avatar').src = data.avatar; } }); } ``` --- ### 五、结合预加载页面管理 通过`plus.webview.getWebviewById`获取预加载页面对象并操作DOM: ```javascript var preloadPage = plus.webview.getWebviewById('preload_detail.html'); preloadPage.evalJS("updateContent('" + newData + "')"); // 调用预加载页面的JS函数 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值