首页 > 其他分享 >Vue element 关于下拉框输入模糊查询

Vue element 关于下拉框输入模糊查询

时间:2023-11-25 10:55:07浏览次数:25  
标签:Vue 函数 name 输入框 queryString element item 下拉框 restaurants

最近又一个新的需求,在输入框实现输入框下拉模糊查询

开始对elementui还不熟悉,不知道怎么用,不过通过网上查阅资料发现使用

<el-col :span="12">
                        <el-autocomplete
                                v-model="form.name"
                                :fetch-suggestions="querySearch"
                                placeholder="提出人"
                                :trigger-on-focus="false"
                                @select="handleSelect"
                                @input="changeData"
                        ></el-autocomplete>
                    </el-col>

用el-autocomplete这个标签

 - `querySearch(queryString, cb)`:该函数用于根据用户输入的查询字符串获取匹配的结果。它首先将当前的 `restaurants` 数组赋值给 `results` 变量,然后根据查询字符串使用 `createStateFilter` 方法创建一个过滤函数,对 `restaurants` 数组进行过滤,最后通过回调函数 `cb` 返回过滤结果。 - `createStateFilter(queryString)`:该函数用于创建一个过滤函数,用于过滤 `restaurants` 数组中的元素。它返回一个箭头函数,该箭头函数根据查询字符串和状态值进行过滤,如果状态值中包含查询字符串,则返回 `true`,否则返回 `false`。 - `handleSelect(item)`:当用户点击选中一个建议项时触发的事件处理函数。它将选中的建议项的值赋值给 `name`、`select`,然后调用 `getnumber()` 方法。 - `changeData(value)`:当输入框的值改变时触发的事件处理函数。如果输入框的值不为空,则调用 `handleChange()` 方法;否则将 `image` 和 `select` 清空。 - `handleChange()`:异步处理输入框的值变化的方法。它构造一个参数对象 `param`,然后调用接口 `operateMgmt.synthesisWorks()` 发送请求。如果请求成功,将返回的数据映射为新的 `restaurants` 数组,并更新 `image` 和 `worksId` 的值;如果请求失败,将显示错误消息。 这段代码的作用是根据用户输入的查询字符串,通过调用接口获取匹配的结果,并更新相关的数据。同时,提供了选中建议项和输入框值改变的事件处理函数。

这个是上面代码的解释

后面的js

querySearch(queryString, cb) {
                    var restaurants = this.restaurants;
                    var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
                    // 调用 callback 返回建议列表的数据
                    cb(results);
                },
                createFilter(queryString) {
                    return (restaurant) => {
                        return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
                    };
                },
                //@select 点击选中建议项时触发
                handleSelect(item) {
                    console.log(item)
                    console.log(this.form.name)
                },
                //@input 在 Input 值改变时触发
                changeData(value){
                    if(value!=''){
                        this.handleChange()
                    }else {
                        this.from.name = ""
                    }
                },
                 convertArrayToObject(array) {
                        const uniqueValues = Array.from(new Set(array)); // 使用 Set 去除重复值,并转换为数组
                        return uniqueValues.map(item => {
                            return {
                                value: item,
                                name: item
                            };
                        });
                    },
                            // 接口
                async handleChange() {
                    await axios.post("index/findByName",qs.stringify({name:this.form.name})) .then(rt =>{
                        this.restaurants = this.convertArrayToObject(rt.data)
                        console.log(this.restaurants)
                    })
                }

我的数据返回的是一个数组,报了一个这样的错误(索引):467 Uncaught TypeError: Cannot read properties of undefined (reading 'toLowerCase')

后来我看了官方文档,要按它们需要的一个{ "value": "三全鲜食(北新泾店)", "address": "长宁区新渔路144号" },格式,我就写了一个这样的函数还能去除查出来的重复元素

 convertArrayToObject(array)上面代码,然后就能正常显示了。
不过我看到网上还有另一种方法
<el-select v-model="listQuery.deptCode" clearable filterable placeholder="请选择" style="top: -6px;">
        <el-option v-for="o in DeptOptions" 
          :key="o.code" 
          :label="o.name" 
          :value="o.name" />
      </el-select>
getOptionsData() {
      getDictInfo().then(res => {
        this.DeptOptions = res.data.list
        console.log('treeList', this.DeptOptions)
      })
    },

 

这个使用选项框标签的方式选择

标签:Vue,函数,name,输入框,queryString,element,item,下拉框,restaurants
From: https://www.cnblogs.com/wuxincong/p/17855291.html

相关文章

  • Vue2纯前端导出
    //导出exportExcel(){//构造数据constdata=[['姓名','手机号码','卡号','身份等级'],...this.list.map((item)=>[item.clientName,item.clientPhone,item.card,item.standing]),]l......
  • Vue3实现九宫格抽奖效果
    需求与效果需求:1、礼品根据后台配置生成2、跑马灯转动效果3、结果后台生成并且每个礼物概率不一样(概率这里不讨论)注意点:1、布局如何排列,是按照跑动排列还是从左至右自上而下排列2、点击按钮如何插入,DOM结构如何生成3、跑马效果如何实现,速度如何控制4、接口如何处理,包括接......
  • Vue3实现转盘抽奖效果
    1、实现转盘数据动态配置(可通过接口获取)2、背景色通过分隔配置3、转动速度慢慢减速,最后停留在每一项的中间,下一次开始从本次开始4、当动画停止后在对应事件中自定义生成中奖提示。5、本次中奖概率随机生成,也可自定义配置实现代码html<template><divclass="graph-page">......
  • 遇到了vue3 刷新问题
     index.d762f427.js:3[Vuewarn]:Unhandlederrorduringexecutionofschedulerflush.ThisislikelyaVueinternalsbug.Pleaseopenanissueathttps://new-issue.vuejs.org/?repo=vuejs/coreat<Tags>at<HomeonVnodeUnmounted=fn<onVnodeU......
  • 若依 vue前端 动态设置路由path不同参数 在页面容器里打开新页面(新路由),面包屑和标签页
    若依vue前端动态设置路由path不同参数在页面容器里打开新页面(新路由),面包屑和标签页标题根据参数动态改变,面包屑多级标题,侧边栏对应菜单亮起:https://blog.csdn.net/weixin_43991241/article/details/126319259?ops_request_misc=&request_id=&biz_id=102&utm_term=matched.redir......
  • 基于springboot,vue的教务管理系统源码 学生信息管理系统
    项目源码获取方式放在文章末尾处项目技术数据库:Mysql5.7数据表:9张开发语言:Java(jdk1.8)开发工具:idea前端技术:Vue后端技术:SpringBoot 项目源码获取方式放在文章末尾处功能简介该项目是一个教务管理系统,角色分为管理员,教师,学生三个角色,具体功能菜单如下:管理员端    登录    ......
  • vue获取手机GPS定位信息
    <divid="demo"><div@click="getPosition">你的定位</div></div><script>letapp=newVue({el:"#demo",data(){return{}......
  • Vue实现动态路由导航
    Vue实现动态路由导航:https://blog.csdn.net/weixin_65950231/article/details/128983010?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170080675716800186579799%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=17008067571680018657......
  • Vue中页面访问拦截
    页面访问拦截目标:基于全局前置守卫,进行页面访问拦截处理说明:对于一个项目来说,大部分的页面,游客都可以直接访问,如遇到需要登录才能进行的操作,提示并跳转到登录,但是:对于支付页,订单页等,必须是登录的用户才能访问,游客不能进入该页面,需要做拦截处理路由导航守卫-全局前置守卫所有......
  • Vue项目demo
    企业级项目目录api接口模块:发送ajax请求的接口模块utils工具模块:自己封装的一些工具方法模块Vant组件库第三方组件库:https://vant-contrib.gitee.io/vant/v2/#/zh-CN/引入组件方式一.自动按需引入组件(推荐)babel-plugin-import是一款babel插件,它会在编译过程中将......