最近在用MUI开发这个APP,发现有时候这个plusready不起作用,表现在,这个页面如果重复打开,这个plusready就进不去,然后上一个页面传过来的值,就没法接收了。这个经过MUI官方确认,是有可能发生的,所以,这里面的话,就需要通过自定义事件,来确保这个值能正确传递。

            首先,我先演示一下,通常我们页面之间的传值的方法,如下:

            参数生成页面:
                mui.openWindow({
                    id: 'lightMapMain.html',
                    url: 'lightMapMain.html',
                    show: {
                        aniShow: 'pop-in'
                    },
                    extras: {//extras里面的就是参数了
                        entrance: "mapDetail",
                        ProjectName: "工程名称"
                    },
                    waiting: {
                        autoShow: true, //自动显示等待框,默认为true
                    }
                }); 
            参数接收页面:
            //plusReady事件后,在里面接收参数
            mui.plusReady(function() {
                var wv = plus.webview.currentWebview();
                var vText = wv.ProjectName;//这样就能接收到上个页面传过来的值了
                document.getElementById("lbProjectName").innerHTML = vText;                

});  

 
通常我们传参就这么进行,但是由于这个页面,多次打开,发生了类似缓存的现象,所以,有时候这个plusReady不能保证每次都能执行。所以,我根据而官方的提示,增加了一个自定义事件,来实现这个情况,实现方法如下(我是双管齐下,plusReady也获取值,自定义事件也获取值)
 
            好,下面演示我的方法(下面这个监听一个按钮,然后打开一个页面):
            var vBtnCtrl = document.getElementById("btnCtrl");
            vBtnCtrl.addEventListener("tap", function() {
                var vNextPage = null;

                //获得下一个页面
                if (vNextPage == null) {
                    vNextPage = plus.webview.getWebviewById('lightMapMain.html');//这个是下一个页面的ID,第一次,他肯定为空,所以,这里面这个fire方法,是不会执行的。
                    if (vNextPage != null) {
                        //触发下一个页面的自定义事件
                        mui.fire(vNextPage, 'DIY_DATA', {
                            entrance: 'mapDetail',
                            ProjectName: vText
                        });
                    }
                }
                var vCurrentWebView = plus.webview.currentWebview();
                if (vCurrentWebView != null) {
                    vCurrentWebView.hide('none');
                }
                //上面这个代码是隐藏当前窗口,我这个是浮动的子窗口,到了下一个页面之后,我要把它隐藏起来,否则等下我返回,这个子窗口还在,就影响体验了。如果你们是整个页面的窗口,那么这个代码可以注释掉。
                mui.openWindow({
                    id: 'lightMapMain.html',//这个ID与上面的自定义事件传参的ID需要一致,因为第一次打开这个页面,上面是获取不到webview的,但是,你这次打开之后,下次再回到这个页面的时候,由于我们之前打开过这个页面,所以,那个自定义事件就会触发了。
                    url: 'lightMapMain.html',
                    show: {
                        aniShow: 'pop-in'
                    },
                    extras: {//这里面是传参了,想我们前面说到的
                        entrance: "mapDetail",
                        ProjectName: vText
                    },
                    waiting: {
                        autoShow: true, //自动显示等待框,默认为true
                    }
                });

})  

 
接下来,我们就到了参数接收页面,如下(首先,我们还是要在plusReady里面接收一次,因为你不能保证这次是初次打开这个页面还是第二次,所以,这个还是需要的。):
            //plusReady事件后,自动创建menu窗口;
            mui.plusReady(function() {
                var wv = plus.webview.currentWebview();
                var vText = wv.ProjectName;
                document.getElementById("lbProjectName").innerHTML = vText;

});

 
但是如果这个是非首次打开的话,就会不一定进来plusReady了,所以,参数可能接收失败了,这里面,我们就要接收自定义事件传过来的参数了,就是前面我们的fire那里了。
代码如下:
            //添加上一个页面自定义事件监听
            window.addEventListener('DIY_DATA', function(event) {
                //获得事件参数
                //`var id = event.detail.id;
                var vText = event.detail.ProjectName;
                document.getElementById("lbProjectName").innerHTML = vText;

});

这样,我们就能把这个参数获取到,双重保证,就冇问题啦,是不是。(如果你们需要谨慎一些,可以把这个自定义事件的监听延迟个300毫秒,保证接收的概率,因为如果是这个自定义事件优先执行了,然后他又去执行这个plusReady,那就会冲突了。所以,你们懂得。) 
 
好了,本次教程到此结束,转载请保留原作者地址以及姓名(本人无偿分享经验,有偿接单制作APP,有需要可以联系我。);
 
作者:南宫萧尘  
E-mail:314791147@qq.com
日期:2016-04-03

MUI APP关于页面之间的传值,plusready和自定义事件的更多相关文章

  1. MUI --- 多个页面之间的传值 A页面B 页面 C页面

    问题: 夸页面传值的,A.B.C三个页面,点A弹出B,C是B子页面;A有两个值要传到C页面中,要怎么样传递呢? A页面传值就不累述了 B页面才是关键 mui.plusReady(function() ...

  2. IOS 页面之间的传值(主讲delegate)

    IOS的Delegate,通俗一点说就是页面之间的传值. 总结一下现在知道的IOS页面之间传值的方式有三种 1.使用NSNotification发送通知的传值 主要是通过NSNotificationC ...

  3. MUI框架开发HTML5手机APP(二)--页面跳转传值&底部选项卡切换

      概 述 JRedu 在上一篇博客中,我们学习了如何使用Hbuilder创建一个APP,同时如何使用MUI搭建属于自己的第一款APP,没有学习的同学可以戳链接学习: http://www.cnblo ...

  4. Mui --- app与服务器之间的交互原理、mui ajax使用

    1.APP与服务器之间的交互原理 app端(客户端)与服务端的交互其实理解起来和容易,客户端想服务器端发送请求,服务器端进行数据运算后返回最终结果.结果可以是多种格式: 1.text 文本格式 2.x ...

  5. struts2怎么实现页面到页面之间的传值?

    我要实现一个产品订购的功能,在浏览产品的时候通过点击一个订购的链接,跳转到提交订单的页面,在跳转的同时要把浏览的产品的名称和型号传到提交订单的页面,并且把这里的订单类的产品名称和型号的表单域里赋上传递 ...

  6. Mui --- 页面之间的传值

    A页面 mui.ajax('http://14.50.2.49:80/default/AppLogin?Prm=' + Prm, { data: {}, //dataType: 'json', typ ...

  7. mui APP与服务器之间的交互原理

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. window.open()页面之间函数传值

    项目中遇到的问题,使用window.open()开一个页面之后,cookie会消失,所以无法一键切肤不管作用,解决方案如下: window.open()总结: window.open("sU ...

  9. html页面之间相互传值

    常见的在页面登录过后会获得一个token值然后页面跳转时传给下一个页面 sessionStorage.setItem("token",result.token);//传输token ...

随机推荐

  1. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  2. ImageView缩放选项

    ImageView.ScaleType 将图片边界缩放到所在view边界时的缩放选项. Options for scaling the bounds of an image to the bounds ...

  3. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  4. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  5. C#学习资源

    # 视频 C#程序设计 Cousera(推荐) # 文档 C#教程 MSDN Microsoft API 和参考目录

  6. 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  7. 套用JQuery EasyUI列表显示数据、分页、查询

    声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...

  8. 微信小程序初探

    做为码农相信大家最近肯定都会听到微信小程序,虽然现阶段还没有正式开放注册,但大家可以还是可以开发测试. 到微信的WIKI(http://mp.weixin.qq.com/wiki?t=resource ...

  9. 将DataTable中的某列转换成数组或者List

    string[] arrRate = dtRate.AsEnumerable().Select(d => d.Field<string>("arry")).ToA ...

  10. BPM配置故事之案例4-子表

    公司渐渐对采购管理重视起来了,新招聘了采购主管老李,老李对现有的申请表很不满意,要求将申请物资和申请原因改成物资明细表 物资明细表 小明只好继续致电大毛-- 大毛:把申请物资和申请原因删掉,新增一个数 ...