Vue移动端搜索页面的历史记录写法

Vue移动端搜索页面的历史记录写法

前言

本文用于记录对于搜索页的历史记录的学习。

预览

先上两张图,分别为展示隐藏搜索列表和历史记录。

image
image

html部分


<template>

  <hips-view

    class="home"

    header-height="48"

    footer-height="48">

    <div slot="header" class="header">

      <hips-nav-bar theme="default">

        <!-- 搜索框区start -->

        <div slot="center" class="input">

          <img src="../assets/images/search.svg" alt="" class="search" >

          <input

            ref="test"

            v-model="searchValue"

            type="text"

            placeholder="搜索操作员"

            @focus="inputFocus"

            @blur="inputBlur"

            @keyup.enter="search">

          <img src="../assets/images/clearsearch.svg" alt="" class="clearsearch" @click="cancleSearch">

        </div>

        <!-- 搜索框区end -->

        <div slot="right" @click="$router.backPage()">取消</div>

      </hips-nav-bar>

    </div>

    <div style="margin-top:10px">

      <!-- 历史记录区start -->

      <div v-if="showHistory" >

        <div class="history-clear">

          <span>历史记录</span>

          <img src="../assets/images/ashbin.svg" alt="" @click="clearHistory">

        </div>

        <div>

          <div v-if="!history.length" class="his-none"><span>暂无数据</span></div>

          <div v-else class="his-content">

            <span v-for="(item, index) in history" :key="index" @click="searchHistory(item)">{{ item }}</span>

          </div>

        </div>

      </div>

      <!-- 历史记录区end -->

    </div>

    <!-- 分页加载区start -->

    <div class="content demo-scroll" style="padding-top:10px;height:calc(100vh - 13.333vw)">

      <hips-scroll

        v-if="!showHistory"

        ref="scroll"

        :data="[orderList]"

        :scroll-options="scrollOption"

        @pulling-down="loadRefresh"

        @pulling-up="loadMore">

        <!-- 展示列表区start -->

        <div class="search-result">

          <div class="search-title">操作员<span>(共{{ sum }}人)</span></div>

          <div v-for="(order, index) of orderList" :key="index" class="result-content" @click="chooseValue(order)">

            <p class="type">

              <img :src="order.pictureUrl?order.pictureUrl:img" alt="" class="type-img">

              <span>{{ order.workerName }}</span>

            </p>

          </div>

        </div>

        <!-- 展示列表区end -->

      </hips-scroll>

    </div>

    <!-- 分页加载区end -->

  </hips-view>

</template>

JS部分


    methods: {

      // 聚焦

      inputFocus () {

        this.getHistorys()

        this.showHistory = true

      },

      // historys存入localStorage

      setHistorys () {

        // 搜索框有内容且不在历史记录里

        let vm = this

        if (vm.searchValue && vm.searchValue !== '' && vm.searchValue !== ' ' && vm.history.indexOf(vm.searchValue) === -1) {

          let Arr = Array.from(new Set(vm.history))

          vm.history = [vm.searchValue, ...Arr]

        }

        // 历史记录只保存6条

        if (vm.history && vm.history.length && vm.history.length > 6) {

          vm.history = vm.history.slice(0, 6)

        }
        localStorage.setItem('historys', JSON.stringify(vm.history))

      },

      // historys获取localStorage

      getHistorys () {

        let history = localStorage.getItem('historys')

        if (history) {

          this.history = JSON.parse(history)

        }

      },

      // 失去焦点

      inputBlur () {

        this.setHistorys()
 this.orderList = []

        this.page = 0

        this.getWorkerApi()

        this.showHistory = false

      },

      // 回车

      search () {

        // 失焦

        this.$refs.test.blur()
      },

      // 删除历史记录

      clearHistory () {

        this.history = []

        localStorage.removeItem('historys')

      },

    ...

    },

  • 首先inputFocus()方法聚焦即点击搜索区时,显示历史记录,并调用获取历史记录的方法getHistorys()。这里使用localStorage存历史记录,所以使用 localStorage.getItem('historys')拿到缓存中的历史记录给this.histor用于展示历史记录区。

  • inputBlur()失去搜索区焦点时隐藏历史记录区,并调用添加历史记录方法setHistorys(),接着初始化搜索添加并条用搜索方法显示展示区列表。这里搜索框有内容且不在历史记录里时才将搜索内容添加到历史记录展示区和通过localStorage.setItem()放入缓存中。添加上限是6条,超出的会从第一条覆盖。要注意放入缓存中的数据必须是JSON格式。

  • search()搜索区按回车时执行此方法。按回车时让其失焦搜索框,然后进入inputBlur()的方法中。

  • clearHistory ()清空历史记录方法,使用localStorage.removeItem('historys')并初始化历史记录显示区。

  • 其他的逻辑如选中历史记录和选中展示区列表数据等就不赘述了。

总结

历史记录功能主要是运用聚焦、失焦、回车、缓存等方法,对数据进行删选和拼接再展示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335