美文网首页Vue
Vue<LocalStorage历史搜索>

Vue<LocalStorage历史搜索>

作者: 誰在花里胡哨 | 来源:发表于2019-08-07 09:50 被阅读0次
    效果图:
    searchHistory.gif

    我采用的是点击回车搜索,使用的话也可以根据自身需求定制搜索方法。使用LocalStorage而不是SessionStorage,是因为LocalStorage在该浏览器窗口关闭时,内容不会被清除。

    代码如下:
    <template>
      <div>
        <!-- 历史搜索 -->
        <div class="search">
          <!-- v-model.trim 去空格 -->
          <input ref="input" type="text" @keyup.enter="search()" v-model.trim="searchCondition" placeholder="请输入搜索内容" />
          <div class="history" v-if="historySearch.length">
            <p>
              历史搜索
              <i class="el-icon-delete" @click="clearnHistory()"></i>
            </p>
            <section>
              <span v-for="(i,index) in historySearch" :key="index">{{i}}</span>
            </section>
          </div>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          searchCondition: "", //搜索的关键词
          historySearch: [] //存放历史搜索的关键词
        };
      },
      created() {
        let searchHistory = localStorage.getItem("searchWord");
        if (searchHistory) {
          this.historySearch = searchHistory.split(",");
          console.log(this.historySearch);
        }
      },
      mounted() {
        //刚进入时获取焦点
        this.$refs["input"].focus();
      },
      methods: {
        //点击回车调用搜索方法
        search() {
          this.getSearchMessage("input");
        },
        //获取搜索的相关数据(调用后端接口处)
        getSearchMessage(event) {
          if (event) {
            //此处是为了解决在移动端唤醒软键盘时,当点击完成按钮后软键盘不收回问题
            this.$refs[event].blur();
          }
          //接口调用成功时把关键词储存起来
          this.setLocalStorage();
          console.log(this.historySearch)
        },
        //储存历史搜索到LocalStorage
        setLocalStorage() {
          let searchWord = localStorage.getItem("searchWord");
          if (searchWord == null) {
            localStorage.setItem("searchWord", this.searchCondition);
          } else {
            let arr = localStorage.getItem("searchWord");
            arr = arr.split(",");
            //去除重复的历史搜索
            if (arr.indexOf(this.searchCondition) != -1) {
              arr = arr;
            } else {
              // unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
              arr.unshift(this.searchCondition);
            }
            this.historySearch = arr;
            //设置历史搜索最多显示多少条
            if (this.historySearch.length > 5) {
              // pop() 方法用于删除并返回数组的最后一个元素。
              this.historySearch.pop();
            }
            localStorage.setItem("searchWord", this.historySearch);
          }
        },
        //清空历史搜索
        clearnHistory(){
          this.historySearch = [];
          localStorage.removeItem("searchWord");
        },
      }
    };
    </script>
    
    <style scoped>
    .search {
      width: 300px;
      margin: 0 auto;
      margin-top: 20%;
    }
    input {
      display: inline-block;
      width: 100%;
      height: 40px;
      padding-left: 20px;
      background: transparent;
      border: none;
      box-shadow: 0 0 5px #e0dfdf;
    }
    p {
      text-align: left;
      margin-top: 20px;
    }
    section {
      display: flex;
      margin-top: 10px;
    }
    span {
      background: #e0dfdf;
      padding: 10px;
      border-radius: 15px;
      margin-right: 10px;
    }
    i{
        cursor: pointer;
    }
    i:hover{
        color: red;
    }
    </style>
    
    

    相关文章

      网友评论

        本文标题:Vue<LocalStorage历史搜索>

        本文链接:https://www.haomeiwen.com/subject/zomndctx.html