HBuilder开发-几种页面打开方式

HBuilder开发-几种页面打开方式

HBuilder开发App有几种页面打开方式

1.初始化时创建子页面

2.直接打开新页面

3.预加载页面

代码:

1.初始化时创建子页面

mui.init({

    subpages: [{

        url: your - subpage - url, //子页面HTML地址,支持本地地址和网络地址

        id: your - subpage - id, //子页面标志

        styles: {

            top: subpage - top - position, //子页面顶部位置

            bottom: subpage - bottom - position, //子页面底部位置

            width: subpage - width, //子页面宽度,默认为100%

            height: subpage - height, //子页面高度,默认为100%

            ......

        },

        extras: {} //额外扩展参数

    }]

});

2.直接打开新页面

mui.openWindow({

    url: new - page - url,

    id: new - page - id,

    styles: {

        top: newpage - top - position, //新页面顶部位置

        bottom: newage - bottom - position, //新页面底部位置

        width: newpage - width, //新页面宽度,默认为100%

        height: newpage - height, //新页面高度,默认为100%

        ......

    },

    extras: {

        ..... //自定义扩展参数,可以用来处理页面间传值

    }

    show: {

        autoShow: true//页面loaded事件发生后自动显示,默认为true

        aniShow: animationType, //页面显示动画,默认为”slide-in-right“;

        duration: animationTime //页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;

    },

    waiting: {

        autoShow: true//自动显示等待框,默认为true

        title: '正在加载...'//等待对话框上显示的提示内容

        options: {

            width: waiting - dialog - widht, //等待框背景区域宽度,默认根据内容自动计算合适宽度

            height: waiting - dialog - height, //等待框背景区域高度,默认根据内容自动计算合适高度

            ......

        }

    }

})

3.预加载页面

// 方式1

mui.init({

    preloadPages: [{

        url: prelaod - page - url,

        id: preload - page - id,

        styles: {}, //窗口参数

        extras: {}, //自定义扩展参数

        subpages: [{}, {}] //预加载页面的子页面

    }]

});

// 方式2

var page = mui.preload({

    url: new - page - url,

    id: new - page - id, //默认使用当前页面的url作为id

    styles: {}, //窗口参数

    extras: {} //自定义扩展参数

});

一些区别

1.子页面和非子页面

以上三种方式中,23打开的页面非子页面,

区别是子页面相当于html中的iframe,而非子页面相当于新开了一个浏览器窗口加载了一个html

2.子页面适用于侧滑菜单

子页面有其有点,特别适用与index.html+list.html这种情况,

如果用index.html(主页面)+list.html(子页面)实现的话,当主页面右滑时子页面会自动跟随,

而用index.html(主页面)+list.html(新页面)实现的话,主页面右滑,新页面不右滑,还得单独处理新页面。

3.子页面实用频繁切换的情况

如果频繁左滑右滑,在配置较低的手机上会出现list.html遮住index.html的情况,

采用子页面模式就不会,采用新页面模式几率很大。

4.子页面适用与下拉刷新和上拉加载

之前做大下拉刷新的时候,采用的是新页面的形式,

按照官网教程,怎么搞都不成功,

后来看了下源码,发现下拉刷新必须采用子页面的形式,

也就是你的list.html必须是index.html的子页面,才可以下拉刷新。

5.新页面适用于新页面

open一个新页面,适用于查看详情之类的,需要打开一个新页面的情况,

并且mui自己封装了新页面的back方法,你就不需要去操心了。

6.预加载页面的两种方式

第一种是在初始化的时候预加载,

这种情况适合在你这个页面在很久之后才会用,

如果你要立即到的页面并使用,那么你会得到null。

第二种方式类似与open,

个人感觉没有什么太大的区别,

唯一的区别是open就直接打开了,

preload只是加载,你可以之后选择打开的时机。

<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(&#39;refreshList&#39;, function() { loadData(); // 自定义数据加载函数 }); }); ``` 2. **子页面触发事件** 在详情页关闭前触发父页面的自定义事件: ```javascript mui.back = function() { var listPage = plus.webview.getWebviewById(&#39;list.html&#39;); mui.fire(listPage, &#39;refreshList&#39;); mui.currentWebview().close(); } ``` --- ### 二、利用`pageshow`事件自动刷新 **适用场景**:每次页面显示时检查数据更新(如用户登录后)。 **实现代码**: ```javascript mui.init({ beforeback: function() { // 返回前标记需要刷新 localStorage.setItem(&#39;needRefresh&#39;, &#39;true&#39;); return true; } }); // 页面显示时检查刷新标记 window.addEventListener(&#39;pageshow&#39;, function(event) { if (localStorage.getItem(&#39;needRefresh&#39;) === &#39;true&#39;) { loadData(); localStorage.removeItem(&#39;needRefresh&#39;); } }); ``` --- ### 三、通过URL参数强制刷新页面 **适用场景**:需要完全重新加载页面时(慎用,可能影响体验)。 **实现方式**: ```javascript // 在原URL后添加时间戳参数 location.href = location.href + &#39;?t=&#39; + new Date().getTime(); ``` --- ### 四、局部DOM刷新(推荐) **适用场景**:仅更新部分数据,避免整页刷新。 **示例代码**: ```javascript function refreshUserInfo() { mui.ajax(&#39;/api/user&#39;, { success: function(data) { document.getElementById(&#39;username&#39;).innerHTML = data.name; document.getElementById(&#39;avatar&#39;).src = data.avatar; } }); } ``` --- ### 五、结合预加载页面管理 通过`plus.webview.getWebviewById`获取预加载页面对象并操作DOM: ```javascript var preloadPage = plus.webview.getWebviewById(&#39;preload_detail.html&#39;); preloadPage.evalJS("updateContent(&#39;" + newData + "&#39;)"); // 调用预加载页面的JS函数 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值