资讯专栏INFORMATION COLUMN

Element输入框带历史查询记录

sewerganger / 715人阅读

摘要:需求描述页面的查询框增加一下显示历史查找记录实现及踩坑记录使用带输入建议的输入框来实现此需求。

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

实现及踩坑记录

使用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))
      }
    }
}
参考

vue中使用localStorage存储信息

element-ui带输入建议的input框踩坑

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101015.html

相关文章

  • tradingView-webSocket进阶——Vue.js

    摘要:无奈,还是需要对这份代码进行加工。功能缺少,主要指业务逻辑实现上的功能缺少。缺少的功能主要是历史记录获取展示的功能。查询缓存是否为空,如果为空,表示数据还没有下发,后再查询一次。如果有数据,取到当前数据,执行回调。 前几天写了一篇关于tradingView和webSocket的文章传送门,因为代码本身还在整合中,所以比较混乱,而且也没有demo可以运行。这两天在GitHub上面看到了一...

    levius 评论0 收藏0
  • 前端:将网站打造成单页面应用SPA(一)

    摘要:可以在各个页面间传递数据,不依赖。可以选择性的保留状态,如音乐网站,切换页面时不会停止播放歌曲。减少了请求体积,节省流量,加快页面响应速度。将返回的替换到页面中。不过这个参数目前并无作用,浏览器目前会选择忽略它。 前言 不知你有没有发现,像Github、百度、微博等这些大站,已经不再使用普通的a标签做跳转了。他们大多使用Ajax请求替代了a标签的默认跳转,然后使用HTML5的新API...

    youkede 评论0 收藏0
  • 沪江前端由H5页面引起的一场前端数据结构讨论

    摘要:发送请求,处理数据。在上面这个场景中,这类数据的结构可能是最常碰到的。整个过程可以简化成数据的变化引起视图的变化,和现在很多前端框架数据驱动思想有几分相似。至此一个对于页面的抽象出来的数据结构雏形基本完成了。 作者:周周(沪江资深Web前端开发工程师)本文为原创文章,转载请注明作者及出处 前言 近期在小D十周年活动之际,又看到了一个自家H5专题梦工厂生成的页面。 showImg(htt...

    xialong 评论0 收藏0
  • 沪江前端由H5页面引起的一场前端数据结构讨论

    摘要:发送请求,处理数据。在上面这个场景中,这类数据的结构可能是最常碰到的。整个过程可以简化成数据的变化引起视图的变化,和现在很多前端框架数据驱动思想有几分相似。至此一个对于页面的抽象出来的数据结构雏形基本完成了。 作者:周周(沪江资深Web前端开发工程师)本文为原创文章,转载请注明作者及出处 前言 近期在小D十周年活动之际,又看到了一个自家H5专题梦工厂生成的页面。 showImg(htt...

    Genng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<