搜索功能实现

搜索功能实现

Search.vue要接受City.vue传递的数据 ,所以City.vue中:

<city-search :cities="cities"></city-search>

Search.vue添加搜索结果模块,并添加搜索逻辑:

<!--搜索结果模块,keyword有值才显示-->
<div class="search-content” v-show="keyword">
    <ul>
        <!--循环搜索结果-->
        <li class="search-item border-bottom" v-for="item of list">
            {{item.name}}
        </li>
        <!--设置hasNoData搜索结果长度为0的时候显示(v-show="!list.length”也可以实现,但是不推荐模版里写逻辑)-->
        <li class="search-item border-bottom" v-show="hasNoData">没有找到匹配数据</li>
    </ul>
</div>
<!--逻辑:input里搜索内容和数据做绑定,data里存一个数据keyword,让input内容跟keyword做双向绑定-->
<input v-model="keyword" class="search-input" type="text" placeholder="输入城市名或拼音”>
props:{
        cities:Object//接收父组件的数据
},
data() {
    return{
        keyword:’’,//与input做双向绑定
        list:[],//存储需要赋值给搜索循环列表
        timer:null//做截流
    }
}
//计算属性
computed:{
        //搜索结果长度为0的返回值给函数
        hasNoData(){
            return !this.list.length
        }
},
//监听Keyword改变
watch :{
    //截流
    keyword(){
        if(this.timer){
            clearTimeout(this.timer)
        }
        //如果keyword不存在,list为空
        if(!this.keyword){
            this.list = []
            return
        }
        this.timer = setTimeout(()=>{
            const result = []
            //循环cities
            for(let i in this.cities){
                //键值对里的值再做一个遍历
                this.cities[i].forEach((value)=>{
                    //如果能从Json文件的cities里数据中的spell或name中搜索到这个关键词,
                    if(value.spell.indexOf(this.keyword)>-1 || value.name.indexOf(this.keyword)>-1)
                        {
                            //就把这项添加到result中
                        result.push(value)
                        }
                })
            }
            //保存到data建立的list数据中
            this.list = result
        },100)
    }
}

添加Bscoll滚动

//引用第三方插件
import Bscroll from 'better-scroll’
//添加ref属性
<div class="search-content" ref="search”></div>
//生命周期函数勾子
mounted(){
    //通过ref传递DOM元素进来
    this.scroll = new Bscroll(this.$refs.search)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值