Element输入框带历史查询记录

本文介绍了使用Element UI实现输入框带历史查询记录功能时遇到的两个主要问题及解决方案。首先,不能直接在组件中返回数组,必须通过回调函数处理数据;其次,数组内的数据格式有特定要求,每个对象需包含键值对以供渲染。通过解决这些问题,成功实现了带输入建议的输入框功能。

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

需求描述
页面的查询框增加一下显示历史查找记录

clipboard.png

实现及踩坑记录

使用Element带输入建议的输入框来实现此需求。用法详见官网

1. 坑1:不能直接在querySearch里返回数组,一定要调用回调函数cb来处理数据

看了一下例子,建议列表应该是个数组,然后我就在querySearch里直接返回了一个数组:

 querySearch(queryString, cb) {
    return JSON.parse(localStorage.getItem('srcOrderNoArr'))
  },

但是回到网页上却发现列表数据加载不出来

正确姿势:

 /**
 * 建议列表
 */
querySearch(queryString, cb) {
  // 调用 callback 返回建议列表的数据
  cb(JSON.parse(localStorage.getItem('srcOrderNoArr')))
}
2. 坑2:数组内数据格式有要求,格式一定要是[{value: '', xxx: ''}, {value: '', xxx: ''}, ...]

这个建议列表是根据数组内的value属性值来渲染的,所以数组内的对象一定要有value键值对。比如说是这样的:

data () {
    return {
        srcOrderNoArr: [{
            value: '',  // 这个必须要有
            type: ''
        },
        {
            value: '',
            type: ''
        },
        {
            value: '',
            type: ''
        }]
   }
}
methods: {
    /**
     * 把搜索记录存入localStorage
     */
    setIntoStorage (type) {
      let self = this
      let noArr = [],  // 订单号历史记录数组
        text = '', value = ''
      switch (type) {
        case 'srcOrderNo':
          text = 'srcOrderNoArr'
          value = self.srcOrderNo
          break
        case 'jobOrderNo':
          text = 'jobOrderNoArr'
          value = self.jobOrderNo
          break
        case 'cntNo':
          text = 'cntNoArr'
          value = self.cntNo
          break
        default:
          break
      }
      noArr.push({value: value, type: type})
      if(JSON.parse(localStorage.getItem(text))) {  // 判断是否已有xxx查询记录的localStorage
        if(localStorage.getItem(text).indexOf(value) > -1 ) {  // 判断是否已有此条查询记录,若已存在,则不需再存储
          return
        }
        if(JSON.parse(localStorage.getItem(text)).length >= 5) {
          let arr = JSON.parse(localStorage.getItem(text))
          arr.pop()
          localStorage.setItem(text, JSON.stringify(arr))
        }
        localStorage.setItem(text, JSON.stringify(noArr.concat(JSON.parse(localStorage.getItem(text)))))
      }
      else {  // 首次创建
        localStorage.setItem(text, JSON.stringify(noArr))
      }
    }
}
参考
  1. vue中使用localStorage存储信息
  2. element-ui带输入建议的input框踩坑
您可以使用以下步骤使el-input输入框弹出历史记录框: 1. 创建一个历史记录组件,该组件可以包含以前输入的值。您可以使用v-for指令从历史记录数组中循环遍历值,并将每个值显示为下拉选项。 2. 在el-input组件中设置一个v-model绑定,它将存储当前输入框中的值。 3. 为el-input组件一个@focus事件监听器,该事件将触发下拉框的显示。在事件处理程序中,您可以设置下拉框的位置和显示方式。 4. 在下拉框中,您可以为每个选项添一个@click事件监听器,当用户选择一个选项时,它将被设置为输入框的值,并将下拉框隐藏。 下面是一个简单的示例代码,可以帮助您快速入门: ```html <template> <div> <el-input v-model="inputValue" @focus="showHistory"> <el-dropdown :show="showDropdown" style="width:100%"> <el-dropdown-menu> <el-dropdown-item v-for="(item,index) in history" :key="index" @click="selectItem(item)">{{item}}</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </el-input> </div> </template> <script> export default { data() { return { inputValue: '', showDropdown: false, history: ['value1', 'value2', 'value3'] }; }, methods: { showHistory() { this.showDropdown = true; }, selectItem(item) { this.inputValue = item; this.showDropdown = false; } } }; </script> ``` 在这个例子中,我们使用了Element UI库中的el-input和el-dropdown组件。在data函数中,我们初始化了输入框的值,下拉框的显示状态和历史记录数组。在showHistory方法中,我们将下拉框的show属性设置为true,以显示下拉框。在selectItem方法中,我们将选择的项设置为输入框的值,并将下拉框隐藏。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值