实现实搜索功能(前端搜索)

用于前端的实时搜索

新人前端刚入行,不严谨请多指教

场景是这样的!在这里插入图片描述

要求:

1、输入名称和位置能够实时显示检索内容
2、最少检索单位为一个字符串,有一个字符串匹配,则显示对应项
3、输入为空时,显示所有项,初始化也为所有项
4、检索为空,显示为空

首先我的思路(本人新手思路):
  1. 先做CSS、HTML
  2. 在想逻辑(JS):
    列表显示的后台数据怎么显示在前端页面=>数据里面哪些字段是我需要的=>怎么样去寻找相应的字段=>找到了相应的字段怎么样显示在前端
  3. 编写测试
HTML部分:

一开始对Vue没有多少理解,看视频学到双向绑定,觉得这个写实时搜索真的太好用了
先用v-model绑定input的value,方便传到后台

<!-- 右边弹窗 -->
<div id="monitorRecord" class="row">
    <!-- 搜索框 -->
    <div class="col-md-4 left" style="border: 1px solid black;">
        <div class="searchRecord row">
            <input type="search" class="cameraSearch " v-model="keyword" placeholder="输入设备位置/名称"><a
                class="searchbtu fa fa-search" @keypress="getCommityCamera(keyword)"></a>
        </div>
        <!-- 展示列表 -->
        <div style="height: 600px;overflow-y: auto;">
            <div v-if="cameraData.length <= 0" v-show="nocameraData">
                <ul v-for="cam in cameraList" class="camList" :key="cam.entityID.id">
                    <li class="selectedCam active" @click="getPhotoList(cam.entityID.id)">
                        <p>{{cam.name}}</p>
                        <p>位置:{{cam.position.address}}</p>
                    </li>
                </ul>
            </div>
            <div v-if="cameraData.length > 0">
                <ul v-for="cam in cameraData" class="camList" :key="cam.entityID.id">
                    <li class="selectedCam active" @click="getPhotoList(cam.entityID.id)">
                        <p>{{cam.name}}</p>
                        <p>位置:{{cam.position.address}}</p>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>

CSS部分就不作展示了。

然后是JS部分:

首先定义几个变量:

            nocameraData:true, //搜索摄像头-控制旧数组的显示与否
            keyword:'',     //搜索摄像头-传入搜索关键字
            cameraData:[]// 搜索摄像头-符合搜索条件的新数组,需要显示搜索结果就用它
            cameraList:[]// 这个里面是后台传过来的数据,需要全部显示的时候就用它
然后是方法:

接收输入的字符串,进行循环比较

            getCommityCamera:function (searchword) {
                let deviceName="";
                let deviceLoca="";
                this.cameraData.splice(0) ; //重置监控数组,显示原始数组
                if(searchword == ''){
                    this.nocameraData =true //没有输入时 显示原始数组
                }else{
                        for(i in this.cameraList) {
                            deviceName = this.cameraList[i].name;
                            deviceLoca = this.cameraList[i].position.address;
                            if(deviceName.indexOf(searchword)=="-1" && deviceLoca.indexOf(searchword)=="-1"){
                                //循环出不匹配的项
                            }else{
                                //循环出匹配项
                                this.cameraData.push(this.cameraList[i])
                            }
                            if(this.cameraData.length =='0'){
                                this.nocameraData =false //搜索完成后没有符合的条件,让旧数组也不显示
                            }
                        }
                      }
            },
最后将方法放到Vue的监听里面:
        watch:{
            //摄像头搜索条件监控
            keyword(){
                this.getCommityCamera(this.keyword)
            }
        }

本人第一次跟着项目做前端,知识储备还不够,希望大家多提意见。放到这里就是想提高一下自己,这个代码里面肯定还有不到位的地方,还希望有兴趣的朋友多多指点

刚入行前端,从零开始学,无基础,之前是做测试的,有时间就记录一点
现在水平是刚入门,自学了html、css、javascript。也谈不上会,就是了解了一点。有也要入行前端的,或者同行大佬愿意指点交流的,请联系我😂

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值