uniapp项目中搜索框的实现

本文介绍了如何在uni-app项目中实现一个搜索框,包括使用uni-search-bar组件、监听输入和确认事件,以及展示搜索结果。同时展示了如何通过uni-tag组件提供搜索建议,并通过点击标签更新搜索内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
    <view class="container">
        <view class="f1">
            <uni-icons @click="goBack" type="back" size="50rpx" color="#fff"></uni-icons>
            <uni-search-bar class='search' v-model="utitle" @confirm="doConfirm" @input="doInput" placeholder="请输入搜索内容"/>
        </view>
        
        <view class="f2">
            <text class="no-data" v-show="onshow">没有搜索到相关商品</text>
            <uni-list>
                <uni-list-item 
                v-for="(p,i) in plist"
                :key="i"
                :thumb="p.ucover"
                thumbSize="lg"
                :ellipsis="1"
                :to="`/pages/list/list?uid=${p.uid}`"
                link
                :title="p.utitle"></uni-list-item>
            </uni-list>
        </view>
        
        <view class="f3">
            <uni-card title="搜索建议" is-full>
                <uni-tag class='tag' @click='utitle="我的团长我的团"' text="我的团长我的团" type="error" circle></uni-tag>
                <uni-tag class='tag' @click='utitle="中国远征军"' text="中国远征军" type="warning" inverted></uni-tag>
                <uni-tag class='tag' @click='utitle="平凡的世界"' text="平凡的世界" type="primary"></uni-tag>
                <uni-tag class='tag' @click='utitle="父母爱情"' text="父母爱情" type="default" circle></uni-tag>
                <uni-tag class='tag' @click='utitle="鸡毛飞上天"' text="鸡毛飞上天" type="error" inverted></uni-tag>
                <uni-tag class='tag' @click='utitle="战狼"' text="战狼" type="warning"></uni-tag>
                <uni-tag class='tag' @click='utitle="长津湖"' text="长津湖" type="primary" inverted circle></uni-tag>
                <uni-tag class='tag' @click='utitle="长津湖之水门桥"' text="长津湖之水门桥" type="default"></uni-tag>
                <uni-tag class='tag' @click='utitle="金刚川"' text="金刚川" type="error" circle></uni-tag>
                <uni-tag class='tag' @click='utitle="攀登者"' text="攀登者" type="warning" inverted></uni-tag>
                <uni-tag class='tag' @click='utitle="仙剑奇侠传"' text="仙剑奇侠传" type="primary"></uni-tag>
                <uni-tag class='tag' @click='utitle="完美世界"' text="完美世界" type="default" inverted circle></uni-tag>
                <uni-tag class='tag' @click='utitle="武动乾坤"' text="武动乾坤" type="error"></uni-tag>
                <uni-tag class='tag' @click='utitle="剑来"' text="剑来" type="warning"></uni-tag>
                <uni-tag class='tag' @click='utitle="雪中悍刀行"' text="雪中悍刀行" type="primary" inverted circle></uni-tag>
            </uni-card>
        </view>   
    </view>
</template>

<script>
import { searchLoad } from '../../service'
    export default {
        data() {
            return {
                utitle:'',
                plist:[],
                timer:null,//防抖
                onshow:false
            }
        },
        methods: {
            goBack(){
                uni.navigateBack()
            },
            doInput(){
                if(this.timer){
                    clearTimeout(this.timer)
                    this.timer=null
                }
                let utitle=this.utitle.trim()
                if(!utitle){
                    this.plist=[],
                    this.οnshοw=false
                    return
                }
            },
            async doConfirm(){
                let utitle=this.utitle.trim()
                // console.log(utitle)
                if(!utitle){
                    uni.showToast({
                        title:'搜索内容不能为空',
                        icon:'error'
                    })
                    return
                }
                let data=await searchLoad(utitle)
                console.log(data);
                if(data.length>0){
                    this.plist=data
                    this.οnshοw=false
                }else{
                    this.plist=[]
                    this.οnshοw=true
                }
                
            },
        }
    }
</script>

<style lang="scss">
.f1{
    padding-top: 50rpx;
    background-color: #0550cd;
    display: flex;
    align-items: center;
        
    .search{
        margin-left: -10rpx;
        flex: 1;
    }
}
.f2{
    .no-data{
        display: inline-block;
        height: 80rpx;
        line-height: 80rpx;
        display: flex;
        justify-content: center;
    }
}
.f3{
    margin-top: 10rpx;
    
    .tag{
        display: inline-block;
        margin-top: 10rpx;
        margin-right: 15rpx;
    }
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值