点击首页的搜索图标跳转到搜索页面,效果如图:
搜索组件
搜索页面分为四个部分:头部、搜索框、商家列表、搜索历史。输入搜索内容展示搜索数据,搜索食品或者餐厅时隐藏搜索历史。
头部
引入e-header.vue组件,设置头部名称,返回按钮。
|
|
搜索框
添加输入框和提交按钮dom,绑定搜索内容v-model="searchValue"
,在输入框内输入搜索内容直接显示搜索到的数据。点击提交按钮,搜索结果并显示。
|
|
searchRestaurant()
方法中需要用到参数latitude
和longitude
,我直接通过vuex mapState获取到它们的值。
搜索结果商家列表
对搜索到的数据渲染在dom上。使用具有路由功能的router-link应用(点击)导航,通过 to
属性指定目标地址,默认渲染成带有正确链接的 <a>
标签,可以通过配置 tag
属性生成别的标签.。另外,当目标路由成功激活时,链接元素自动设置一个表示激活的 CSS 类名。对搜索结果restaurantFood
进行遍历获取 v-for="item in restaurantFood"
,设置key值:key="item.id"
。设置路由路径:to="{path: '/shop', query: {id:item.id}}"
,query是带查询参数,结果为 /shop?id=xxx
。对获取到的每个Item进行dom填充数据渲染。
|
|
搜索历史
每次把输入的搜索内容记录下来并保存。修改searchTarget方法,在获取搜索结果之前先判断是否有搜索历史记录historyValue,如果有添加到searchHistory里,同时隐藏历史记录。点击搜索结果进入下一页面时进行判断是否已经有一样的历史记录,如果没有则新增,如果有则不做重复储存,判断完成后进入下一页。
|
|
在dom中渲染数据。首先判断是否存在searchHistory,如果有显示搜索历史块v-if="searchHistory.length&&showHistory"
。遍历searchHistory得出每个item,当点击某个item时进入下一页@click="searchTarget(item)"
。
|
|
对每个搜索历史添加个删除按钮,删除某个搜索历史,创建deleteHistory(index)
事件
|
|
删除当前历史记录同时再对搜索历史进行存储。
点击清空搜索历史,也就是清除全部搜索历史,对searchHistory
置空同时再对搜索历史进行存储。
|
|
搜索结束后,删除搜索内容直到为空时清空搜索结果,并显示历史记录。
|
|
功能实现如图: