使用element-autocomplete实现搜索建议

需求

数据库有8条数据,本地只能存储两条数据,实现查询建议

代码

<style>
    .my-autocomplete li {
        line-height: normal;
        padding: 7px;
    }

    .my-autocomplete li .name {
        text-overflow: ellipsis;
        overflow: hidden;
    }

    .my-autocomplete li .default {
        color: #ccc;
    }
</style>

<body>
    <div id="app">
        <h1>{{title}}</h1>
        <el-col :span="12">
            <div class="sub-title">输入后匹配输入建议</div>
            <el-autocomplete popper-class="my-autocomplete" class="inline-input" v-model="queryString" value-key="name"
                :fetch-suggestions="querySearch" placeholder="请输入内容" :trigger-on-focus="false" @select="handleSelect"
                @keyup.enter.native="handleEnter" autocomplete="on">
                <template slot-scope="{ item }">
                    <div class="default">{{item.default}}</div>
                    <div class="name">{{item.name}}</div>
                </template>
            </el-autocomplete>
        </el-col>
        </el-row>
        <h3>提交的数据为:{{submitData}}</h3>
    </div>

</body>

<script>
    new Vue({
        el: "#app",
        data() {
            return {
                title: '自动补全',
                submitData: "",
                localData: [],
                queryString: ''
            }
        },
        methods: {
            async querySearch(keyword, cb) {
                let result = this.localData.filter((item) => item.name.toLowerCase().indexOf(keyword
                    .toLowerCase()) !== -1);
                // 如果没找到, 则使用模糊查询再从数据库查询一次
                if (result.length === 0) {
                    result = await http.get("demo?keyword=" + keyword);
                    this.localData.splice(0, result.length, ...result);
                }
                result = result.length === 0 ? [{
                    default: "无匹配数据"
                }] : result;
                cb(result);
            },
            handleSelect(data) {
                console.log(data); // 选中的整个对象,包含键
                console.log(this.queryString); // 只有值
            },
            handleEnter() {
                // 显示提交数据
                this.submitData = this.queryString;
                // 隐藏建议提示
                var e = document.querySelector(".el-autocomplete-suggestion");
                e.style.display = 'none';
            }
        },
        async created() {
            this.localData = await http.get('demo')
        }
    })
</script>

效果图

在这里插入图片描述

无匹配数据时提示无匹配数据

无匹配数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值