這篇文章將為大家詳細講解有關如何使用Vue實現(xiàn)關鍵詞實時搜索高亮顯示關鍵詞,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都網站設計、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元廣平做網站,已為上家服務,為廣平各地企業(yè)和個人服務,聯(lián)系電話:18980820575
Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創(chuàng)建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網頁中相應的地方,所以越來越多的前端開發(fā)者使用vue。
下面是demo運行的效果圖

好了閑話不多說直接上代碼
實時搜索
實時搜索通過觸發(fā)input事件和定時器來實現(xiàn)
<input v-model="keyWords" type="text" placeholder="請輸入關鍵詞" @input="handleQuery">
在每次輸入框的值變化的時候都會執(zhí)行handleQuery方法
clearTimer () {
if (this.timer) {
clearTimeout(this.timer)
}
},
handleQuery (event) {
this.clearTimer()
console.log(event.timeStamp)
this.timer = setTimeout(() => {
console.log(event.timeStamp)
// console.log(this.lastTime)
// if (this.lastTime - event.timeStamp === 0) {
this.$http.post('/api/vehicle').then(res => {
console.log(res.data.data)
this.changeColor(res.data.data)
})
// }
}, 2000)
},在handleQuery方法中有一個定時器,通過設置時間來控制搜索的執(zhí)行,由于輸入時input的框中的值總是變化的,所以每次變化都會執(zhí)行一次handleQuery,我們通過clearTimer方法清除timer定時器,如果兩次輸入的間隔時間小于你設置的時間間隔(2s)的話第一個定期器將會被清除,同時執(zhí)行第二個定時器。這樣就實現(xiàn)了實施搜多的控制,而不是每次輸入的時候就去請求數(shù)據(jù)。
注意:如果時間設置過短或者說我們服務器請求較慢的話,可能第一次查詢還沒有返回便進行了第二次查詢,那么返回的數(shù)據(jù)將是兩次查詢的結果,造成查詢結果的混亂,如果使用的是axios可以利用axios.CancelToken來終止上一次的異步請求,防止舊關鍵字查詢覆蓋新輸入的關鍵字查詢結果。
高亮顯示
通過RegExp實現(xiàn)對關鍵詞的替換,通過添加class實現(xiàn)關鍵詞高亮顯示
changeColor (resultsList) {
resultsList.map((item, index) => {
// console.log('item', item)
if (this.keyWords && this.keyWords.length > 0) {
// 匹配關鍵字正則
let replaceReg = new RegExp(this.keyWords, 'g')
// 高亮替換v-html值
let replaceString =
'<span class="search-text">' + this.keyWords + '</span>'
resultsList[index].name = item.name.replace(
replaceReg,
replaceString
)
}
})
this.results = []
this.results = resultsList
}在查詢到結果后執(zhí)行changeColor方法將查詢出來的數(shù)據(jù)傳遞過來通過RegExp來將關鍵詞替換成huml標簽,同時用vue中的v-html進行綁定。最后將demo完整的代碼展示出來
<template>
<div class="Home">
<input v-model="keyWords" type="text" placeholder="請輸入關鍵詞" @input="handleQuery">
<ul>
<li v-for="(item,index) in results" :key='index' v-html='item.name'></li>
</ul>
</div>
</template>
<script>
export default {
name: 'Home',
data () {
return {
keyWords: '',
results: []
}
},
methods: {
clearTimer () {
if (this.timer) {
clearTimeout(this.timer)
}
},
handleQuery (event) {
this.clearTimer()
console.log(event.timeStamp)
this.timer = setTimeout(() => {
console.log(event.timeStamp)
// console.log(this.lastTime)
// if (this.lastTime - event.timeStamp === 0) {
this.$http.post('/api/vehicle').then(res => {
console.log(res.data.data)
this.changeColor(res.data.data)
})
// }
}, 2000)
},
changeColor (resultsList) {
resultsList.map((item, index) => {
// console.log('item', item)
if (this.keyWords && this.keyWords.length > 0) {
// 匹配關鍵字正則
let replaceReg = new RegExp(this.keyWords, 'g')
// 高亮替換v-html值
let replaceString =
'<span class="search-text">' + this.keyWords + '</span>'
resultsList[index].name = item.name.replace(
replaceReg,
replaceString
)
}
})
this.results = []
this.results = resultsList
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.search-text{
color: red;
}
</style>關于“如何使用Vue實現(xiàn)關鍵詞實時搜索高亮顯示關鍵詞”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
分享題目:如何使用Vue實現(xiàn)關鍵詞實時搜索高亮顯示關鍵詞
鏈接URL:http://www.yijiale78.com/article42/jooeec.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、品牌網站制作、外貿網站建設、網站策劃、企業(yè)建站、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)