vue input搜索功能分享

全部都是亮点:

<template>
    <div>
        <div class="top"><!--搜索框-->
            <van-nav-bar
                    title="搜索"
                    left-text="返回"
                    right-text="按钮"
                    left-arrow
                    @click-left="onClickLeft"
            />
        </div>
        <van-search v-model="value"
                    @search="sea"
                    background="#12A4FF"
                    placeholder="请输入搜索关键词"/>
        <div class="wrap"><!--搜索记录展示-->
            <div v-for="i in data" @click="soo(i)">{{i}}</div>
        </div>
        <div class="goods" v-if="change"><!--搜索商品列表展示-->
            <van-card
                    v-for="i in wys"
                    num="2"
                    :price="i.price"
                    desc="描述信息"
                    :title="i.name"
                    :thumb="i.img"
            />
        </div>
    </div>

</template>

<script>
    export default {
        name: "Search",
        data() {
            return {
                change: false,
                value: "",
                data: JSON.parse(localStorage.getItem('so')) || ['多大', '酸菜鱼', '地方'],
                goods: '',
                wys: [],
                www: false,
            }
        },
        mounted() {
            this.$axios.get('http://localhost:8080/data.json').then(res => {
                this.goods = res.data.data.goods;
            })
        },
        methods: {
            onClickLeft() {
                window.history.back();
            },
            sea(q) {//添加历史搜素
                this.wys = [];
                let ww = this.value;
                let p = this.data.findIndex(item => {
                    return item === this.value
                });

                if (this.data.length < 5) {//判断搜索历史数据条数,以作保留条数
                    this.data.unshift(this.value);
                } else {//在这里进行搜索数据去重,会把曾经搜索过的,再搜索排在第一位,将旧的位置历史删除
                    p === -1 ? this.data.splice(4, 1) : this.data.splice(p, 1);//搜索历史去重
                    this.data.unshift(this.value);//添加历史到首位
                }

                localStorage.so = JSON.stringify(this.data);
                this.change = true;
                document.getElementsByClassName("van-field__control")[0].focus();

                this.goods.map(i => {
                    if (i.name.includes(ww)) {
                        this.wys.push(i);
                    }
                });
            },
            soo(data) {
                let q = false;
                this.value = data;
                document.getElementsByClassName("van-field__control")[0].focus();
                this.sea();
            }
        },
    }
</script>

<style scoped>
    .wrap div {
        margin: 10px 10px;
        border: 1px solid #eee;
        padding: 5px 10px;
    }

    .wrap {
        margin: 10px 0;
        width: 100%;
        display: flex;
        align-items: center;
        flex-wrap: wrap;
    }

</style>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值