伟子
伟子
  • 发布:2014-10-17 17:29
  • 更新:2015-09-10 14:54
  • 阅读:6412

打开新页面怎么传值(没有preloadPages)

分类:HTML5+

官方给的方法是preloadPages预加载页面,但是预加载页面关闭以后第二次打开就是白的了,怎么解决?
或者怎么直接create页面,而不是获取到预加载的时候怎么传值?
官方代码**
{{{
//初始化预加载详情页面
mui.init({
preloadPages:[{
id:'detail.html',
url:'detail.html'
}
]
});

var detailPage = null;
//添加列表项的点击事件
mui('.mui-content').on('tap', 'a', function(e) {
var id = this.getAttribute('id');
//获得详情页面
if(!detailPage){
detailPage = plus.webview.getWebviewById('detail.html');
}
//触发详情页面的newsId事件
mui.fire(detailPage,'newsId',{
id:id
});
//打开详情页面
mui.openWindow({
id:'detail.html'
});
});
}}}
mui.fire(detailPage,'newsId',{
id:id
});
这个方法里面的detailPage一定是预加载的页面吗?我现在创建的页面为什么传值不过去?
{{{
detailPage = plus.webview.create( 'test.html', 'test.html');
mui.fire(detailPage, 'testId',"120");
mui.openWindow({
url: 'test.html',
show:{
autoShow:true,
aniShow: "slide-in-right"
},
waiting: {
autoShow: true, //自动显示等待框,默认为true
title: '正在加载...', //等待对话框上显示的提示内容
}
});
}}}

2014-10-17 17:29 负责人:无 分享
已邀请:
DCloud_UNI_CHB

DCloud_UNI_CHB

页面间传值参考:http://ask.dcloud.net.cn/article/63

关于自定义事件传值的情况,只要目标窗口存在,且loaded事件已发生即可,不需要一定是预加载的;

因此你上面的代码尝试修改如下:

detailPage = plus.webview.create( 'test.html', 'test.html');  
detailPage.addEventListener('loaded',function(){  
        mui.fire(detailPage, 'testId',"120");  
            mui.openWindow({  
                url: 'test.html',   
                show:{  
                  autoShow:true,  
                  aniShow: "slide-in-right"  
                },  
                waiting: {  
                    autoShow: true, //自动显示等待框,默认为true  
                    title: '正在加载...', //等待对话框上显示的提示内容  
                }  
          });  
},false);  
  • 伟子 (作者)

    好的,谢谢~~

    2014-10-20 10:40

  • 伟子 (作者)

    可是我在新页面是可以加载到这个testId,但是我在新页面用testId参与ajax请求什么的,不能操作DOM了~~

    2014-10-20 16:59

  • DCloud_UNI_CHB

    不太清楚为什么不能操作dom了,可以把你的代码贴上来,把错误信息也加上来。

    2014-10-20 17:05

伟子

伟子 (作者)

谢谢。
这个是传值的那个页面
{{{
detailPage = plus.webview.create( 'news.html', 'news.html');
detailPage.addEventListener('loaded',function(){
mui.fire(detailPage, 'newsId',id);
mui.openWindow({
url: 'news.html',
show:{
autoShow:true,
aniShow: "slide-in-right"
},
waiting: {
autoShow: true, //自动显示等待框,默认为true
title: '正在加载...' //等待对话框上显示的提示内容
}
});
},false);
}}}

这个是传值接受的页面
{{{
//获取从上个页面获取过来的参数
window.addEventListener('newsId', function(event) {
newsWait = plus.nativeUI.showWaiting("新闻加载中");
gyp.ajax({
type : 'GET',
timeout : 2000,
url : "http://192.168.1.240/api/shaklee/news01.php?id="+event.detail,
dataType : 'html',
success : function(data) {
var newsContentData = {
newsTemprData: data
};
jQuery(".mui-title").text(jQuery(jQuery.trim(data)).children(".title").text());
var newsTempData = template('newsContentData', newsContentData);
document.getElementById('newsContent').innerHTML = newsTempData;
newsWait.close();
},
error : function(xhr, type, s2) {
console.log(type);
newsWait.close();
}
});
});
}}}
通过传过来的id,我发了一个ajax,success里面的data alert是正常的,但是添加到页面中去就不行。我如果在index里面预加载news.html就是正常的,但是不想预加载,因为news模版是固定的,里面的内容是在一直变的。谢谢啦~~

南门看守者

南门看守者

既然是预加载的页面,在不用是就没必要把它关闭了, 只需要调用hide()隐藏起来,这样以后就还能再使用

running

running - 生命不息,折腾不止

通过url传值最简单方便

/**

  • @desc 解析url参数
  • @param {Object} url
  • @example app.parseUrlQuery("http://baidu.com?a=1&b=2");
    */
    app.parseUrlQuery = function(url) {
    var query = {},
    i, params, param;
    if (url.indexOf('?') >= 0) url = url.split('?')[1];
    else return query;
    params = url.split('&');
    for (i = 0; i < params.length; i++) {
    param = params[i].split('=');
    query[param[0]] = param[1];
    }
    return query;
    }

该问题目前已经被锁定, 无法添加新回复