搜索后跳转到菜谱列表页面,搜索时搜索的是菜的名字,因此要用查询菜谱名的接口,以下图。html
点击 API 测试工具能够看到参数说明。
pn 表示从第几个数据开始返回,rn 表示一次返回多少个数据。若是 pn = 0,rn = 10;想要第一次请求返回的数据下标是 0~9,第二次请求返回的是 10~19,那么须要 pn 每请求一次后加一, pn * rn 才会返回所指望的结果。json
返回数据举例,以下图。小程序
组件容器包含图片、菜名和菜的分类标签,结构较简单。segmentfault
<view wx:for="{{List}}" wx:key="index" class='container'> <image src='{{item.albums}}' mode='aspectFill'></image> <view class='title'>{{item.title}}</view> <view class='tag1'>{{item.tags[0]}}</view> <view class='tag2'>{{item.tags[1]}}</view> </view>
只须要由外部属性传来 list 数组就能够了。api
Component({ properties:{ List:{ type:Array, value:[] } } });
该组件样式也很简单,整个容器相对定位,title 和 tag 绝对定位。图片比例 4:3,tag 字体颜色:#9e9e9e。数组
.container { position: relative; height: 210rpx; margin: 30rpx 0 0 30rpx; } .container image { width: 280rpx; height: 210rpx; } .container .title { position: absolute; top: 0rpx; left: 310rpx; font-size: 36rpx; } .container .tag1 { position: absolute; bottom: 0rpx; left: 310rpx; font-size: 20rpx; color: #9e9e9e; } .container .tag2 { position: absolute; bottom: 0rpx; left: 410rpx; font-size: 20rpx; color: #9e9e9e; }
搜索后跳转到列表页面,为搜索组件添加跳转逻辑,在搜索组件(从0开发豆果美食小程序——搜索组件)的 handleSearch 方法和 onTap 方法中调用 wx.navigateTo ,同时将输入的菜名经过查询参数带到 list 页面。app
wx.navigateTo({ url: `/pages/list/index?menuStr=${this.data.inputValue}`, });
在 onLoad 函数中读取参数并存下来。ide
onLoad: function(options) { this.setData({ menuStr: options.menuStr }) this.handleRequest(); },
handleRequest 函数专门负责处理请求。从接口文档的数据分析咱们知道须要维护一个 pageNumber 才能不断获取新数据。请求成功后,pageNumber + 1,读取已存的 menuList,称做 oldList,若是是首次请求,直接把数据放入 menuList,若是非首次请求,将数据拼接到 oldList 后再放入 menuList。这里的拼接显然是为触底刷新准备的,因此在 onReachBottom 函数中调用的也是 handleRequest。函数
因为接口返回的 tag 数量过多,这里只截取其中两个做为 listItem 的标签。工具
var appKey = require('../../config.js'); const menuURL = 'https://apis.juhe.cn/cook/query?'; data: { menuList: [], menuStr: '', pageNumber: 0, }, handleRequest() { wx.showNavigationBarLoading() let self = this; const rn = 10; // 一次请求返回条数 const albums = 1; // 封面图片,默认是1 let pn = self.data.pageNumber; wx.request({ url: menuURL + 'key=' + appKey + '&menu=' + self.data.menuStr + '&rn=' + rn + '&pn=' + pn * rn + '&albums=' + albums, data: { result: [] }, success: function(res) { let oldList = self.data.menuList; let data = res.data.result.data; pn += 1; if (oldList.length == 0) { for (let i = 0; i < 10; i++) { data[i].tags = data[i].tags.split(";", 4).slice(1, 3); } self.setData({ menuList: data, pageNumber: pn, }) } else { for (let i = 0; i < 10; i++) { data[i].tags = data[i].tags.split(";", 4).slice(1, 3); } self.setData({ menuList: oldList.concat(data), pageNumber: pn, }) } wx.hideNavigationBarLoading() } }); },
onReachBottom: function() { this.handleRequest(); },
{ "usingComponents": { "ck-listItem": "/components/listItem/index" } }
<ck-listItem List="{{menuList}}"></ck-listItem>
MATERIAL DESIGN Design Develop Tools
至此,列表页面已完成初步开发。