Vue项目搜索历史功能(详细)
看效果图:
html代码:
<template
>
<div
class="qqq">
<!-- 顶部搜索框
-->
<div
class="search">
<!-- 返回上一步
-->
<div @click
="back">
<img src
="../assets/img/left.png" />
</div
>
<div
>
<input
type
="text"
placeholder
="请输入内容"
v
-model
="keywords"
@input
="changevalue($event)"
ref
="getValue"
/>
</div
>
<div @click
="quxiao" v
-show
="show" style
="color:grey;">取消
</div
>
<div @click
="search" v
-show
="!show">搜索
</div
>
</div
>
<!-- 历史搜索
-->
<div
class="history" v
-show
="show">
<p
>历史搜索
</p
>
<p
>
<!-- 删除
-->
<img src
="../assets/img/delete.png" @click
="del" />
</p
>
</div
>
<!-- 历史搜索列表
-->
<div
class="hislist">
<span v
-for="(item,index) in hislist" :key
="index" v
-show
="show">{{item
}}</span
>
</div
>
<!-- 搜索列表数据渲染
-->
<div
class="course">
<!-- 跳转详情页
-->
<router
-link
tag
="div"
:to
="{path:'/coursedetail',query:{id:item.id}}"
v
-for="(item,index) in searchList"
:key
="index"
class="courselist"
>
<p
class="coursetitle">{{item
.title
}}</p
>
<p
class="coursetime">
<img src
="../assets/img/time.png" />
<span
>
{{ item
.start_play_date
|dateTime
}}~{{ item
.end_play_date
| dateTime
}}
|共
{{item
.total_periods
}}课时
</span
>
</p
>
<p
class="coursename" v
-for="(teach,indexTeach) in item.teachers_list" :key
="indexTeach">
<img
:src
="teach.teacher_avatar" />
<span
>{{teach
.teacher_name
}}</span
>
</p
>
<p
class="courseprice">
<span
>{{item
.sales_num
}}人已报名
</span
>
<span
>{{item
.price
|price
}}</span
>
</p
>
</router
-link
>
</div
>
</div
>
</template
>
js代码:
防抖功能使用到 lodash 工具库 地址链接 : Lodash是一个一致性、模块化、高性能的 JavaScript 实用工具库。 下载: npm install lodash 使用: import _ from ‘lodash’
<script
>
import { lessonList
} from "../http/api";
import _
from "lodash";
import { Toast
} from "vant";
export default {
name
: "search",
data() {
return {
keywords
: "",
searchList
: [],
show
: true,
hislist
: []
};
},
created() {
let a
= localStorage
.hislist
;
if (a
) {
this.hislist
= JSON.parse(a
);
}
},
methods
: {
changevalue(e
) {
this.keywords
= e
.target
.value
;
if (this.keywords
.length
> 0) {
this.show
= false;
} else {
this.show
= true;
this.searchList
= [];
}
},
del() {
this.hislist
= [];
localStorage
.clear();
Toast
.success("删除成功");
},
quxiao() {
this.$router
.push({
path
: "/course"
});
},
back() {
this.$router
.go(-1);
},
search
: _
.debounce(
function() {
var index
= this.hislist
.findIndex(ele
=> {
return ele
== this.keywords
;
});
if (index
!= -1) {
this.hislist
.splice(index
, 1);
}
this.hislist
.unshift(this.keywords
);
if (this.hislist
.length
> 4) {
this.hislist
.splice(5, 1);
}
localStorage
.hislist
= JSON.stringify(this.hislist
);
lessonList({
page
: 1,
limit
: 10,
keywords
: this.keywords
}).then(res
=> {
this.searchList
= res
.data
.data
.list
;
});
console
.log("防抖");
},
3000,
{
leading
: true,
trailing
: false
}
)
}
};
</script
>
css代码:
<style lang
="scss" scoped
>
.search
{
width
: 100%;
height
: 14.33333vw
;
line
-height
: 100px
;
display
: flex
;
justify
-content
: space
-between
;
border
-bottom
: 2px solid gainsboro
;
div
:nth
-of-type(1) {
margin
-top
: 5px
;
margin
-left
: 20px
;
img
{
width
: 35px
;
}
}
div
:nth
-of-type(2) {
input
{
border
: none
;
border
-radius
: 40px
;
background
: #e4e7ed
;
width
: 540px
;
height
: 60px
;
text
-indent
: 30px
;
font
-size
: 25px
;
}
}
div
:nth
-of-type(3) {
margin
-right
: 30px
;
font
-size
: 28px
;
}
div
:nth
-of-type(4) {
margin
-right
: 30px
;
font
-size
: 28px
;
}
}
.course
{
border
: 1px solid #f0f2f5
;
margin
-top
: 0px
;
}
.history
{
display
: flex
;
justify
-content
: space
-between
;
margin
-top
: 30px
;
p
:nth
-of-type(1) {
font
-size
: 28px
;
font
-weight
: bold
;
margin
-left
: 30px
;
}
p
:nth
-of-type(2) {
margin
-right
: 30px
;
img
{
width
: 35px
;
}
}
}
.hislist
{
span
{
display
: inline
-block
;
background
: #f7f7f7
;
margin
-left
: 20px
;
padding
: 10px
20px
10px
20px
;
border
-radius
: 20px
;
}
}
.courselist
{
width
: 83%;
margin
: 0 auto
;
margin
-top
: 30px
;
background
: white
;
border
-radius
: 20px
;
height
: 380px
;
padding
: 0px
25px
;
.coursetitle
{
font
-size
: 30px
;
padding
-top
: 25px
;
}
.coursetime
{
margin
-top
: -25px
;
img
{
width
: 24px
;
vertical
-align
: -3px
;
}
span
{
font
-size
: 26px
;
color
: #
666666;
}
}
.coursename
{
margin
-top
: 50px
;
img
{
width
: 50px
;
vertical
-align
: -15px
;
}
span
{
font
-size
: 26px
;
color
: #
666666;
margin
-left
: 20px
;
}
}
.courseprice
{
width
: 100%;
margin
: 0 auto
;
border
-top
: 1px solid gainsboro
;
margin
-top
: 30px
;
padding
-top
: 15px
;
span
:nth
-of-type(1) {
font
-size
: 25px
;
color
: #
666666;
}
span
:nth
-of-type(2) {
font
-size
: 30px
;
color
: green
;
margin
-left
: 430px
;
}
}
}
</style
>
以上就是历史搜索功能的代码实现,注释也很清楚的!
转载请注明原文地址:https://tech.qufami.com/read-472.html