搜索後跳轉到菜譜列表頁面,搜索時搜索的是菜的名字,因此要用查詢菜譜名的接口,以下圖。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
至此,列表頁面已完成初步開發。