原理

实施方法

一、预加载的实现(两种方法):

官方地址

预加载方法一:
mui.init({
preloadPages:[
{
url:prelaod-page-url,
id:preload-page-id,
styles:{},//窗口参数
extras:{},//自定义扩展参数
subpages:[{},{}]//预加载页面的子页面
}
],
preloadLimit:5//预加载窗口数量限制(一旦超出,先进先出)默认不限制
});

在使用中,可能用不到那么多的属性,下面是我的使用案例:

mui.init({
preloadPages: [{
url: 'account_detail.html',
id: 'account_detail.html'
}]
});

只需要设置url和id就可以,详情页需要的参数在使用mui.fire的时候传过去;

预加载方法二:
var page = mui.preload({
url:new-page-url,
id:new-page-id,//默认使用当前页面的url作为id
styles:{},//窗口参数
extras:{}//自定义扩展参数
});
预加载两种方法对比:

1.方法一为异步创建预加载页面,并且可以同时创建多个页面,但是由于是异步的,因此不能立即获取到创建的webview对象,并且需要使用plus.webview.getWebviewById来获取到创建的webview;
2.方法二为同步创建预加载页面,可以在创建后同步获取到webview,即方法二的“page”变量;但是方法二只能同时创建一个预加载的页面;

二、通过mui.fire触发自定义事件

1.在详情页创建并监听自定义事件“account_bid_detail_fire”:

$.plusReady(function() {
/**
* 实例化获取接口数据方法
*/
var get_bid_detail = new GET_BID_DETAIL();
window.addEventListener('account_bid_detail_fire', function(event) {
//获得事件参数
var id = event.detail.id;
console.log(JSON.stringify(event.detail));
//触发ajax,根据id向服务器请求当前列表详情
get_bid_detail.init(id);
});
});

mui.fire从列表页传的参数都在event.detail中,可以输出具体查看;

2.在列表页触发“account_bid_detail_fire”事件:

mui(document.body).on("tap", ".account_bid_list", function() {
//触发详情页面的account_bid_detail_fire事件
var detail_webview = null;
if(!detail_webview) {
//判断webview是否存在
detail_webview = plus.webview.getWebviewById("account_detail.html");
}
//detail_webview是在列表页中预加载的页面;
mui.fire(detail_webview, 'account_bid_detail_fire', {
id: _this.dataset.id
});
//打开详情页面
mui.openWindow({
id: "account_detail.html",//详情页webview的id
show: {
aniShow: 'none', //页面不显示动画
duration: '0' //
}
});
});

接下来,在列表页点击列表的时候就可触发详情页的“account_bid_detail_fire”事件,然后触发详情页的ajax来更新请求的数据;

文末福利:

福利一:前端,Java,产品经理,微信小程序,Python等资源合集大放送:https://www.jianshu.com/p/e8197d4d9880
福利二:微信小程序入门与实战全套详细视频教程:https://www.jianshu.com/p/e8197d4d9880

mui列表跳转到详情页优化方案-LMLPHP

领取方式:
如果需要学习视频,欢迎关注 【编程微刊】微信公众号,回复【领取资源】一键领取以下所有干货资源,获取更多有用技术干货、文档资料。所有文档会持续更新,欢迎关注一起成长!

作者:喜欢坑队友的程序员
链接:https://www.jianshu.com/p/d9e30a54f0bf
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

05-22 06:18