原理

因为列表页到详情页是多对一的形式,即列表页的多条数据列表对应的是一个详情页,只是数据不同而;因此,可以在加载列表页时预加载详情页,即创建一个详情页的webview,但是不显示出来,点击列表的时候在通过特定方法触发详情页的事件,获取响应数据,这种做法可以极大程度的缩短响应的时间。

实施方法

  1. 通过预加载提前加载详情页;
  2. mui.fire 触发详情页面指定事件,调用ajax更新数据;

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

官方地址

预加载方法一:

通过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


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

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

mui列表跳转到详情页优化方案的更多相关文章

  1. 微信小程序云开发-数据库-列表页携带id跳转到详情页

    一.新建页面 新建列表页"pages/goodslist/goodslist",新建列表详情页"pages/gooddetail/gooddetail"  二. ...

  2. Django----使用模板系统渲染博客页面、实现列表和详情页的跳转、前后跳转功能

    .模板写法同Flask,可以参考之前的FLask-模板 .将之前的BootStrap静态页面中的数据使用模板写 <!DOCTYPE html> <html lang="en ...

  3. vue通过id从列表页跳转到对应的详情页

    1. 列表页:列表页带id跳转到详情页 详情页:把id传回到后台就可以获取到数据了 2.列表页跳转到详情页并更改详情页的标题 列表页:带id和页面标题的typeid跳转到详情页 详情页:在html绑定 ...

  4. React-Native 之 GD (十一)加载更多功能完善 及 跳转详情页

    1.加载更多功能完善 GDHome.js /** * 首页 */ import React, { Component } from 'react'; import { StyleSheet, Text ...

  5. Android跳转淘宝、京东APP商品详情页

    import Android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; imp ...

  6. 微信小程序页面列表与详情页跳转的正确姿势

    初学小程序,碰到列表与详情页跳转遇到的问题,记录一下. 一.问题 1个列表页: 1个详情页: 列表页代码: onLoad:异步查询数据并setData 详情页代码: 保存成功后,调用navigateB ...

  7. VUE通过id从列表页跳转到相对的详情页

    新闻列表页面: 在这里我用a标签进行跳转,在vue里面可以这样写<router-link></router-link> 1 <router-link :to=" ...

  8. node——由新闻列表跳转到新闻详情页

    当我们在浏览新闻列表页面的时候,想要看感兴趣的新闻内容,需要到详情页面去查看内容. 在之前写好了新闻列表页面,现在需要做列表页面到详情页面的跳转,需要考虑一下问题 1.点击新闻列表某一项跳转到详情页面 ...

  9. vue项目实现列表页-详情页返回不刷新,再点其他菜单项返回刷新的需求

    问题背景:有时候一些列表会有一些跳转的需求,比如跳到详情页.或者是其他相关的页面(比如跳到用户列表去查看用户的相关信息)等,此时再返回列表页,列表页会刷新重置.目前需求就是需要改成如下情况: 问题1. ...

随机推荐

  1. ODBC总结

    引用头文件:sql.h.sqlext.h.sqltypes.h 添加库文件:odbc32.lib   odbccp32.lib 1.定义环境变量: SQLHENV henv =nullptr://环境 ...

  2. Activity Test1

    源代码下载(免积分) :下载 Acitivty測试的API的父类是InstrumentationTestCase.这个类可以获取Instrumentation.来操作Activity. 对于acti ...

  3. javascript: with 表单验证

    <html> <head> <script type="text/javascript"> function validate_required ...

  4. Android 继承framelayout,实现ScrollView 和 HorizontalScrollView 的效果

    有些项目,需要让控件或者布局进行水平和垂直同时能拖拽,当然,ScrollView 和 HorizontalScrollView 的结合写法是一种写法.但是,这么写用户体验效果不佳,会有迟钝感,因此推荐 ...

  5. (转)Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPL

    转自:http://blog.csdn.net/huashnag/article/details/9357517 Starting Oracle Universal Installer... Chec ...

  6. 【codeforces 434 div 1 A】Did you mean...

    [链接]h在这里写链接 [题意] 让你维护一段序列. 这段序列,不会出现连续3个以上的辅音. (或者一块全是辅音则也可以) (用空格可以断开连续次数); 要求空格最小. [题解] 模拟着,别让它出现连 ...

  7. sql for xml query sample

    sample 1: declare @x xml select @x='<ArrayOfScheduledTime> <ScheduledTime> <Recurrenc ...

  8. spark源码解析之scala基本语法

    1. scala初识 spark由scala编写,要解析scala,首先要对scala有基本的了解. 1.1 class vs object A class is a blueprint for ob ...

  9. 一致哈希算法Java实现

    一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中经常使用的算法. 传统的Hash算法当槽位(Slot)增减时,面临全部数据又一次部署的问题.而一致哈希算法确 ...

  10. 在scala中调用java代码

      详细代码请见https://github.com/lujinhong/scalademo 在scala中调用java代替非常非常简单,直接调用即可 (一)一个简单示例 1.创建一个java类 pa ...