MUI-返回到首页(任意的父级页面)

最近项目中遇到了一个返回首页的问题,就是业务流程的最后一步完成后要返回到首页。在这期间跳转了很多页面,用mui.back()只能返回到上一级页面,多次调用也没用。
原创文章,欢迎转载.转载请注明出处: https://www.jianshu.com/p/b66f246bdbbc

解决方案

5+给页面对象提供两个方法可以完美的解决这个问题,这两个方法分别是:

  1. opener方法,获取上一级页面:
    page.opener();
  1. close方法,关闭页面:
    page.close();

假如从首页跳转到A页面,从A页面跳转到B页面,从B页面跳转到C页面,C页面里有个完成按钮,点击返回到首页。实现完成按钮返回首页的功能只需要三步:

  • 第一步,获取当前页面(C页面);
  • 第二步,获取当前页面的上一级页面(B页面)和上一级页面的上一级页面(A页面);
  • 第三步,关闭当前页面(C页面)、B页面和A页面,完成。

通过上面三步就可以实现,视觉上的效果和返回到上级页面的效果一样(不用担心会出现多次返回动画。亲测,不管有多少层级,只有一次返回动画就返回到了首页),对应的代码如下:

    //获取当前页面
    var cPage = plus.webview.currentWebview();
    //获取上一级页面(B页面)
    var bPage = cPage.opener();
    //获取上一级页面的上一级页面(A页面)
    var aPage = bPage.opener();
    //关闭当前页面(C页面)、B页面和A页面
    cPage.close();
    bPage.close();
    aPage.close();

封装-返回到任意的父级页面

我们在用 mui.openWindow() 跳转页面的时候一般都会指定一个页面id,只要我们知道这个id就可以获取到这个页面(关于应用的入口页面id,请参考文章末尾的注意)。再利用上面5+给页面对象提供的两个方法就可以返回到任意的父级页面。

实现思路:

  • 第一步,判断目标页面id是否存在(即是否能找到这个id的页面),存在则执行第二步,否则退出。
  • 第二步,判断目标页面是否是当前页面,不是则执行第三步,否则退出。
  • 第三步,利用opener()方法循环遍历父级页面,并将要关闭的页面保存到pages数组中,直到找到目标页面为止。如果找到了目标页面则关闭pages数组中保存的所有页面之后退出,否则不关闭任何页面直接结束。

具体代码如下:

/**
* 从当前页面pop到目标页面
* @param {String} targetId 目标页面ID
*/
function popToTarget(targetId){
    //获取目标页面
    var target = plus.webview.getWebviewById(targetId);
    if (!target) {
        console.log("目标页面不存在!");
        return;
    }
    //获取当前页面
    var current = plus.webview.currentWebview();
    if (current === target) {
        console.log("目标页面是当前页面!");
        return;
    }
    //将要关闭的页面
    var pages = new Array(current);
    //父级页面
    var opener = current.opener();
    while (opener){
        if (opener === target) {//找到了目标页面
            //关闭目标页面的所有子级页面pages
            pages.map(function(page){
                page.close();
            });
            return;
        }
        pages.push(opener);
        opener = opener.opener();
    }
    //没有找到目标页面
    console.log("目标页面不是当前页面的祖先页面!");
}

注意:有一个页面,我们可能不知道它的id是多少,这个页面就是应用的入口页面(是在manifest中配置的),其实它的id就是appid。但是我们通过基座调试时IDE安装了一个叫"HBuilder"的应用,这个应用的appid是"HBuilder"并不是我们配置的appid(只有打包后才是我们自己配置的appid)。如果我们想要返回到应用的入口页面,直接传我们配置的appid,打包后是没有问题的。但是通过基座调试时就不能正常返回。所以建议直接通过getLaunchWebview()方法拿到应用的入口页面,然后获取它的id属性,这样不管是基座调试还是打包后都可以正常返回。具体实现只需要如下一句代码:

popToTarget(plus.webview.getLaunchWebview().id);

上面这些只是单纯的返回到目标页面,如果返回到目标页面后想对其刷新或做一些其他操作,可以参考下一篇文章:MUI-返回到首页(任意的父级页面)并刷新(或做其他操作)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,111评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,036评论 1 32
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • 冬夜凉,幸有霓虹暖。 大雪尚未如约至, 温酒已凉空留憾。 独自莫凭栏。
    梅十九阅读 270评论 0 0
  • 具体参考这个链接 http://www.arubin.org/files/geo_search.pdf 完整sq...
    风神AI阅读 3,139评论 4 4