§页面逻辑处理本文配套视频地址:https://v.qq.com/x/page/n0554...开始之前,请将ch3-2分支的code/目录导入到微信开发工具修改index.js文件,导入我们需要的外部资源'usestrict';importutilfrom'../../utils/index';importconfigfrom'../../utils/config';letapp=getApp();letisDEV=config.isDev;//后面的代码都会放在这个对象里面lethandler={}Page(handler)数据绑定我们先把渲染相关的数据挖出来,添加到handler对象的data字段中(Model层)修改index.js中的handler对象://这里省略部分代码lethandler={data:{page:1,//当前加载了多少页数据days:3,pageSize:4,totalSize:0,hasMore:true,//用于判断下拉加载加载更多内容操作articleList:[],//存放文章列表数据,与视图相关联获取数据,然后唯一要做的就是获取列表数据,初始化数据的工作一般放在生命周期的onLoad()中:lethandler={onLoad(options){this.requestArticle()},/**获取文章列表数据*/requestArticle(){util.request({url:'list',mock:true,data:{tag:'微信热门',start:this.data.page||1、天数:this.data.days||3、pageSize:this.data.pageSize,langs:config.appLang||'en'}}).then(res=>{console.log(res)});}}数据加载完成后,我们需要对接口返回的数据进行业务容错处理,修改requestArticle函数:lethandler={//这里省略部分代码requestArticle(){util.request({url:'list',mock:true,data:{tag:'微信热点',start:this.data.page||1,days:this.data.days||3,pageSize:this.data.pageSize,langs:config.appLang||'en'}}).then(res=>{//正常返回数据if(res&&res.status===0&&res.data&&res.data.length){//normaldatadosomethingconsole.log(res)}/**如果第一个页面没有数据加载,说明数据有异常*处理方式:弹出异常提示信息(默认提示信息)并设置下拉加载功能不可用*/elseif(this.data.page===1&&res.data&&res.data.length===0){util.alert();this.setData({hasMore:f也});}/**如果第一页没有数据,说明没有数据,关闭下拉加载功能即可*/elseif(this.data.page!==1&&res.data&&res.data.length===0){this.setData({hasMore:false});}/**返回异常错误*显示后台返回的错误信息,并设置下拉加载功能不可用*/else{util.alert('Prompt',res);this.setData({hasMore:false});返回空值;}})}}上面我们将wx.request重新包装成Promise形式。其实我们请求的是mock数据,但是界面大多数情况下,请求的数据不会直接应用于UI展示,所以我们需要做一层数据转换,将界面数据转换成视图数据。格式化数据,首先要看后端返回的数据结构。我们需要做两件事来遍历数据数组,格式化返回的日期,并显示当天的今天。往年的文章显示标准的年-月-日格式2015-06-12。遍历articles数组,判断这篇文章的contentId是否已经在全局变量visitedArticles中。如果存在,则表示它已被访问过。修改app.js,添加全局变量visitedArticlesglobalData:{user:{name:'',avator:''},visitedArticles:''}修改index.js中的requestArticle函数:lethandler={//部分代码省略hererequestArticle(){//注意:修改这里的代码if(res&&res.status===0&&res.data&&res.data.length){letarticleData=res.data;//格式化原始数据letformatData=this.formatArticleData(articleData);console.log(formatData)}}}添加格式化列表数据的代码:lethandler={//这里省略部分代码/**格式化文章列表数据*/formatArticleData(data){letformatData=undefined;if(data&&data.length){formatData=data.map((group)=>{//格式化日期group.formatDate=this.dateConvert(group.date);if(group&&group.articles){letformatArticleItems=group.articles.map((item)=>{//判断item是否被访问hasVisited=this.isVisited(item.内容编号);归还物品;})||[];group.articles=formatArticleItems;}返回组})}返回格式数据;},/**将初始日期字符串格式化'2017-06-12'*return'今天'/08-21/2017-06-12*/dateConvert(dateStr){if(!dateStr){return'';}让今天=newDate(),todayYear=today.getFullYear(),todayMonth=('0'+(today.getMonth()+1)).slice(-2),todayDay=('0'+today.getDate()).slice(-2);让convertStr='';让originYear=+dateStr.slice(0,4);让todayFormat=`${todayYear}-${todayMonth}-${todayDay}`;if(dateStr===todayFormat){convertStr='今天';}elseif(originYear
