91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue如何實現輸入框新增搜索歷史記錄功能

發布時間:2021-05-20 15:02:23 來源:億速云 閱讀:294 作者:小新 欄目:web開發

這篇文章主要介紹了Vue如何實現輸入框新增搜索歷史記錄功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

vue實現搜索顯示歷史搜索記錄,采用插件-good-storage

安裝插件

     npm install good-storage -S

在本地新建cache.js文件,該文件是關于本地存儲的邏輯處理(緩存到本地的數據最大緩存15條,并且新的插入在第一位,首先得到當前的存儲數據情況,將關鍵字存到數組中,判斷如果數組中有相同的數據,則把重復的數據刪除,將新的關鍵字存入到前面)

cache.js 文件中的代碼如下

/*把搜索的結果保存下來*/ 
/*用export把方法暴露出來*/ 
/*定義存儲搜索的key _search_定義內部使用的key*/ 
const SEARCH_KEY='_search_' 
const SEARCH_MAX_LENGTH=15 
/*插入方法   arr存儲的數據 val傳入存儲的值 compare前后比較的函數 maxlen存入的最大值*/ 
function insertArray(arr,val,compare,maxlen){ 
  //findIndex()函數也是查找目標元素,找到就返回元素的位置,找不到就返回-1。 
  const index=arr.findIndex(compare) 
  if(index===0){ //數據為數組中的第一個數據 不做任何操作 
    return  
  } 
  if(index>0){ //數組中有這條數據并且不再第一個位置 
    arr.splice(index,1) //刪掉這個數 
  } 
  arr.unshift(val);//把這條數據存儲到數組中的第一個位置上 
  if(maxlen && arr.length>maxlen){ 
    //如果有條數限制并且數組的個數大于限制數 
    arr.pop() //方法將刪除 arrayObject 的最后一個元素,把數組長度減 1,并且返回它刪除的元素的值 
     
  } 
} 
//開源storage的庫,對localstorage和sessionstorage的封裝 
import storage from 'good-storage' 
export function saveSearch(query){ 
  let searches=storage.get(SEARCH_KEY,[]) 
  /*邏輯是最后一次搜索的結果放到搜索歷史的第一個*/ 
  insertArray(searches,query,(item)=>{    
    return item===query //這是傳入的一個比較函數 說明query在這個數組中 
  },SEARCH_MAX_LENGTH) 
  storage.set(SEARCH_KEY,searches) 
  return searches 
}

在對應的組件中應用的方式:

<template>
 <div class="search">
  <!-- 頂部搜索欄 -->
  <div class="header">
   <div class="head-title title-style">輸入關鍵字</div>
   <div class="head-input">
    <input
     type="text"
     ref="inputchange"
     v-model="valuetext"
     @keyup.enter="onSearch(true)"
     @keyup.tab="onSearch(true)"
     @focus="initPage"
     placeholder="請輸入關鍵字進行搜索"
    />
    <div type="text" @click="clear" class="input-btn title-style">清除</div>
   </div>

   <div class="history-panel" v-if="!isFocus">
    <div v-if="historyxs">搜索歷史</div>
    <div v-if="searches_list.length>0">
     <ul class="his_ulcon" v-if="historyxs">
      <li
       v-for="(item,index) in searches_list"
       :key="index"
       @click="historysearch(item)"
      >{{item}}</li>
     </ul>
    </div>
    <div class="history-tips" v-else>暫無搜索記錄!</div>
    <p v-if="historyxs" @click="clearhis">清空歷史記錄</p>
   </div>
  </div>
  <!-- ... 此處省略無關代碼 -->

  <!-- 底部按鈕 -->
  <div class="footer title-style">
   <van-row>
    <van-col span="12">
     <div class="left" @click="resetData">重置所選條件</div>
    </van-col>
    <van-col span="12">
     <div class="right" @click="onSearch(true)">立即搜索</div>
    </van-col>
   </van-row>
  </div>
 </div>
</template>

<script type="text/Babel">
import { saveSearch } from "../../utils/cache"; //引用本地存儲js
import storage from "good-storage"; //引入good-storage包
export default {
 data() {
  return {
   isFocus: true,
   searches_list: [], //歷史搜索記錄列表
   historyxs: false,
   valuetext: ""
  };
 },
 mounted() {},
 methods: {
  //輸入框獲取焦點
  initPage() {
   this.isFocus = false;
   this.$emit("initSearchPage");
   //為避免重復先清空再添加
   this.searches_list = [];
   let searches = storage.get("_search_");
   this.searches_list = searches ? searches : [];
   if (this.searches_list.length > 0) {
    this.historyxs = true;
   } else {
    this.historyxs = false;
   }
  },
  //清空歷史記錄
  clearhis() {
   storage.remove("_search_");
   this.searches_list = [];
   this.historyxs = false;
  },
  //點擊歷史搜索把搜索的記錄添加到good-storage中
  historysearch(item) {
   saveSearch(item);
   this.valuetext = item;
   this.historyxs = false;
  },
  resetData() {
   // ...
   //  此次省略重置數據的邏輯代碼
  },
  onSearch(isFirst) {
   this.isFocus = true;
   if (this.valuetext != "") {
    //搜索框不為空
    saveSearch(this.valuetext); // 本地存儲搜索的內容
    let params = {
     majorInfo: this.valuetext //流程類型或者流程名稱
    };
    this.$emit("handleSearch", params);
    this.isFocus = true;
   }
   // ...
   // 此次省略調用搜索接口的代碼
  },
  clear() {
   this.valuetext = "";
  }
  // ... 無關代碼已省略
 }
};
</script>

<style lang="less" rel="stylesheet/less" type="text/less" scoped>
.search {
 overflow-y: scroll;
 overflow-x: hidden;
 padding: 0.14rem 0.12rem 0.53rem;
 .header {
  border-bottom: 0.01rem solid #f2f2f2;
  .head-title {
   padding-bottom: 0.05rem;
   color: #666666;
  }
  .head-input {
   width: 100%;
   padding-bottom: 0.1rem;
   display: flex;
   flex-direction: row;
   justify-content: space-between;

   > input {
    height: 0.29rem;
    width: 2.84rem;
    border-radius: 0.03rem;
    background-color: #f6f6f6;
    font-family: PingFang-SC-Regular;
    font-weight: Regular;
    color: #999999;
    font-size: 0.12rem;
    padding-left: 0.12rem;
   }
   .input-btn {
    color: #029ffb;
    width: 0.5rem;
    height: 0.29rem;
    line-height: 0.29rem;
    text-align: center;
   }
  }
  .history-panel {
   width: 100%;
   overflow: hidden;
   padding: 0.1rem 0;
   border-top: 1px solid #f2f2f2;
   .his_ulcon {
    margin-top: 0.1rem;
    box-sizing: border-box;
    display: flex;
    flex-direction: row;
    justify-content: flex-start;
    flex-wrap: wrap;
    > li {
     border: 1px solid #f2f2f2;
     border-radius: 0.03rem;
     display: inline-block;
     font-size: 0.12rem;
     padding: 0 0.15rem;
     width: fit-content; //div寬度自適應文字內容
     width: -webkit-fit-content;
     width: -moz-fit-content;
     height: 0.29rem;
     line-height: 0.29rem;
     text-align: center;
     margin-right: 0.1rem;
     background-color: #f2f2f2;
     margin-bottom: 0.1rem;
    }
   }
   div {
    box-sizing: border-box;
    font-size: 0.13rem;
    color: #666666;
    font-weight: Medium;
    font-family: PingFang-SC-Medium;
   }
   > p {
    text-align: center;
    margin-top: 0.1rem;
    font-size: 0.13rem;
   }
  }
  .history-tips {
   text-align: center;
  }
 }
 .title-style {
  font-size: 0.13rem;
  font-weight: Medium;
  font-family: PingFang-SC-Medium;
 }
}
</style>

溫馨提示:引入cache.js時你的文件路徑要按照你自己的路徑來 一 一對應

Vue的優點

Vue具體輕量級框架、簡單易學、雙向數據綁定、組件化、數據和結構的分離、虛擬DOM、運行速度快等優勢,Vue中頁面使用的是局部刷新,不用每次跳轉頁面都要請求所有數據和dom,可以大大提升訪問速度和用戶體驗。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Vue如何實現輸入框新增搜索歷史記錄功能”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

洪泽县| 徐水县| 金门县| 闽清县| 化州市| 浠水县| 乌兰察布市| 中牟县| 海安县| 青铜峡市| 宣威市| 桂林市| 交城县| 安化县| 乌审旗| 石门县| 蒙自县| 通榆县| 葵青区| 长兴县| 新宁县| 江陵县| 安塞县| 惠水县| 稻城县| 桐梓县| 邵阳县| 林州市| 漳州市| 庄河市| 宁城县| 潼关县| 新竹市| 淳安县| 长春市| 阿拉善左旗| 阜城县| 平远县| 绩溪县| 尉犁县| 新邵县|