vue輸入框使用模糊搜索功能的實(shí)現(xiàn)代碼
實(shí)現(xiàn)原理:
利用js的 indexOf 方法可返回某個(gè)指定的字符串值在字符串中首次出現(xiàn)的位置。
模板中的代碼
<div class="search">
<!--輸入框使用的是vant的輸入框組件-->
<van-search
@input="autoSearch"
v-model="value"
placeholder="請(qǐng)輸入搜索關(guān)鍵詞"
style="width:90%; display:inline-block;"
/>
<span>搜索</span>
</div>
<!--展示數(shù)據(jù)-->
<ul
v-for="(item) in allArea"
:key="item.communityId"
>
<li v-if="allNewArea.length != 0">{{ item.communityName }}</li>
<li v-else>{{ item.communityName }}</li>
</ul>
js代碼
getAreaDetail () { // 獲取數(shù)據(jù)
this.$http({
method: 'post',
url: '/appProperty/getCommunity',
}).then(res => {
this.allArea = res.data
this.allNewArea = res.data
})
},
autoSearch () { // 模糊搜索加節(jié)流(500ms觸發(fā)一次)
var allowPass = true
if (!allowPass) {
return
}
setTimeout(() => {
allowPass = false
this.allArea = [];
this.allNewArea.filter(item => {
if (item.communityName.indexOf(this.value) !== -1) { // 此處也可使用js的 search 方法實(shí)現(xiàn)indexOf 一樣效果
this.allArea.push(item);
}
})
}, 500);
},
拓展
節(jié)流函數(shù) 節(jié)省流量節(jié)省內(nèi)存性能的一種函數(shù),可以理解為是一種性能優(yōu)化方案
//首先定義一個(gè)全局變量 當(dāng)瀏覽器窗口大小發(fā)生變化也就是重新計(jì)算窗口大小的時(shí)候觸發(fā)
var canRun = true;
window.onresize = function () {
if (!canRun) {
return
}
canRun = false//設(shè)置一個(gè)定時(shí)器進(jìn)行輪詢(xún)操作
setTimeout(function () {//這是要做的事情
console.log("函數(shù)節(jié)流")//最后記得重新賦值true繼續(xù)讓他取反
canRun = true//每隔1000毫秒也就是1秒鐘就執(zhí)行一次
}, 1000)
}
防抖函數(shù) 當(dāng)事件觸發(fā)完成之后再延遲觸發(fā),并且只觸發(fā)一次;如果在觸發(fā)完成之前再次觸發(fā),則會(huì)再次刷新延遲
//定義方法即要做的事情
function fun(){
console.log('onresize')
}
//定義事件觸發(fā)要執(zhí)行的方法,兩個(gè)參數(shù)分別是傳入的要做的事情和定時(shí)器的毫秒數(shù)
function debounce (fn, delay) { //定義一個(gè)變量作為等會(huì)清除對(duì)象
var handle; //這里用到了閉包,一個(gè)函數(shù)里面return另一個(gè)函數(shù),變量相互牽引導(dǎo)致垃圾回收機(jī)制不會(huì)銷(xiāo)毀handle變量
return function () { //在這里一定要清除前面的定時(shí)器,然后創(chuàng)建一個(gè)新的定時(shí)器
clearTimeout(handle) //最后這個(gè)定時(shí)器只會(huì)執(zhí)行一次也就是事件觸發(fā)完成之后延遲500毫秒再觸發(fā)(這里的變量賦值是跟定時(shí)器建立連接,進(jìn)行地址賦值,一定要重新賦值給handle
handle = setTimeout(function () {
fn()
}, delay)
}
}
//給瀏覽器添加監(jiān)聽(tīng)事件resize
window.addEventListener('resize', debounce(fun, 500));
兩者區(qū)別
- 防抖函數(shù)和節(jié)流函數(shù)都是用來(lái)提升性能優(yōu)化及用戶(hù)體驗(yàn)的一種方案;
- 防抖函數(shù)只會(huì)執(zhí)行一次,且是最后觸發(fā)的那一次,而節(jié)流函數(shù)會(huì)規(guī)律性的執(zhí)行多次;
總結(jié)
到此這篇關(guān)于vue輸入框使用模糊搜索功能的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)vue輸入框模糊搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue 父子組件數(shù)據(jù)傳遞的四種方式( inheritAttrs + $attrs + $listeners)
這篇文章主要介紹了Vue 父子組件數(shù)據(jù)傳遞的四種方式( inheritAttrs + $attrs + $listeners),需要的朋友可以參考下2018-05-05
詳解如何在Vue項(xiàng)目中實(shí)現(xiàn)累加動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了如何在你的Vue項(xiàng)目中實(shí)現(xiàn)累加動(dòng)畫(huà),文中的示例代碼簡(jiǎn)潔易懂,具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-06-06
Vue router/Element重復(fù)點(diǎn)擊導(dǎo)航路由報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了Vue router/Element重復(fù)點(diǎn)擊導(dǎo)航路由報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
基于vue實(shí)現(xiàn)8小時(shí)帶刻度的時(shí)間軸根據(jù)當(dāng)前時(shí)間實(shí)時(shí)定位功能
這篇文章主要介紹了基于vue實(shí)現(xiàn)8小時(shí)帶刻度的時(shí)間軸根據(jù)當(dāng)前時(shí)間實(shí)時(shí)定位功能,開(kāi)始時(shí)間、結(jié)束時(shí)間可配置,根據(jù)當(dāng)前時(shí)間初始化位置,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
vue pages 多入口項(xiàng)目 + chainWebpack 全局引用縮寫(xiě)說(shuō)明
這篇文章主要介紹了vue pages 多入口項(xiàng)目 + chainWebpack 全局引用縮寫(xiě)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09

