视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何优化mui列表跳转到详情页
2020-11-27 15:25:49 责编:小采
文档


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

官方地址

预加载方法一:

通过mui.init方法中的preloadPages参数进行配置。

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的时候传过去;

预加载方法二:

通过mui.preload方法预加载。

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触发自定义事件

原理:两个同时存在的webview之间可以通过mui.fire方法来触发另一个webview中的自定义事件,因此,我们可以在详情页中创建一个自定义事件,监听列表页中的mui.fire方法。
mui.fire( target , event , data )
target:详情页(列表页中预加载的详情页)的webview;
event:详情页中监听的自定义事件;
data:需要传给详情页的参数;

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页面跳转方式之间的差异

MUI实现上拉加载和下拉刷新的实例分享

mui js返回刷新页面的方法实例代码

下载本文
显示全文
专题