VUE側(cè)邊導(dǎo)航欄實(shí)現(xiàn)篩選過濾的示例代碼
需求
實(shí)現(xiàn)側(cè)邊導(dǎo)航欄的同時(shí),需要實(shí)現(xiàn)篩選功能。且由于導(dǎo)航名稱中可能包含大寫英文字母,所以還需要支持小寫英文字母篩選。
篩選效果:


清除篩選條件:

思路
- 監(jiān)聽
el-input的回車事件:@keydown.enter.native - 將父組件傳過來的導(dǎo)航欄數(shù)據(jù)進(jìn)行深拷貝一層,并新建一個(gè)數(shù)組
newMenuList進(jìn)行存儲匹配的導(dǎo)航欄數(shù)據(jù):const copySideMenuList = JSON.parse(JSON.stringify(this.sideMenuList));- 深拷貝一層,為了防止原數(shù)據(jù)在搜索一次后被篡改,因?yàn)橐玫氖峭粋€(gè)內(nèi)存地址
- 將
el-input中輸入的字符串中的小寫字母轉(zhuǎn)為大寫字母:event = event.toUpperCase(); - 使用
includes方法判斷導(dǎo)航欄的名字中是否有el-input中的數(shù)據(jù),如果有則將這一項(xiàng)整個(gè)push到newMenuList中,最后判斷newMenuList的length是否大于0,如果大于0則將newMenuList賦值給導(dǎo)航欄組件需要的數(shù)據(jù)中,如果newMenuList的length不大于0則進(jìn)行提示:未匹配到該菜單 - 當(dāng)
el-input執(zhí)行clearable操作或者el-input中輸入為空時(shí),將父組件傳過來的導(dǎo)航欄數(shù)據(jù)賦值到導(dǎo)航欄組件所需要的數(shù)據(jù)中
實(shí)現(xiàn)
- 這里使用到
el-input的clearable,@clear,@keydown.enter.native - 注意:因?yàn)槭?code>el-input標(biāo)簽的本質(zhì)其實(shí)是
elementUI的一個(gè)組件,所以監(jiān)聽回車鍵需要添加事件修飾符.native,它允許我們在自定義的組件標(biāo)簽中添加原生的DOM事件- 其他的
elementUI組件也是可以用這個(gè)方法來綁定原生DOM事件 - 而
el-button之所以可以直接使用@click是因?yàn)?code>elementUI在創(chuàng)建組件時(shí)就為<el-button>里面的<button>標(biāo)簽綁定了一個(gè)click事件,相當(dāng)于是官方提前為我們準(zhǔn)備好了一個(gè)click接口,我們看似是在調(diào)用原生js的click事件,實(shí)際上是在調(diào)用elementUI官方為我們提前準(zhǔn)備好的方法。
- 其他的

主要代碼如下:
<el-input placeholder="輸入關(guān)鍵字進(jìn)行過濾" v-model="filterText" class="side-menu__filter" size="small" clearable suffix-icon="el-icon-search" @clear="handleSearch(filterText)" @keydown.enter.native="handleSearch(filterText)"></el-input>
handleSearch(event) {
// 將將輸入的字符串中的小寫字母轉(zhuǎn)為大寫字母
event = event.toUpperCase();
let newMenuList = [];
// 將父組件傳過來的導(dǎo)航欄數(shù)據(jù)進(jìn)行深拷貝一層
const copySideMenuList = JSON.parse(JSON.stringify(this.sideMenuList));
copySideMenuList.forEach((firstItem) => {
// 循環(huán)判斷導(dǎo)航欄數(shù)據(jù)是否匹配到搜索的字符
if (firstItem.label.includes(event)) {
newMenuList.push(firstItem);
}
if (!firstItem.label.includes(event) && firstItem.children) {
for (let secondItem of firstItem.children) {
if (secondItem.label.includes(event)) {
newMenuList.push(secondItem);
}
}
}
});
if (newMenuList.length > 0) {
this.menuList = newMenuList;
} else {
this.$message.warning('未匹配到該菜單');
}
// 搜索字符串為空時(shí)返回原數(shù)據(jù)
if (event == '') {
this.menuList = this.sideMenuList;
}
}到此這篇關(guān)于VUE側(cè)邊導(dǎo)航欄實(shí)現(xiàn)篩選過濾的示例代碼的文章就介紹到這了,更多相關(guān)VUE側(cè)邊導(dǎo)航欄篩選過濾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Vue 數(shù)據(jù)更新了但頁面沒有更新的 7 種情況匯總及延伸總結(jié)
這篇文章主要介紹了詳解Vue 數(shù)據(jù)更新了但頁面沒有更新的 7 種情況匯總及延伸總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
vue2.0 使用element-ui里的upload組件實(shí)現(xiàn)圖片預(yù)覽效果方法
今天小編就為大家分享一篇vue2.0 使用element-ui里的upload組件實(shí)現(xiàn)圖片預(yù)覽效果方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue前端頁面數(shù)據(jù)加載添加loading效果的實(shí)現(xiàn)
這篇文章主要介紹了vue前端頁面數(shù)據(jù)加載添加loading效果的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
前端VUE3項(xiàng)目部署到linux服務(wù)器(CentOS?7)完整步驟
這篇文章主要介紹了前端VUE3項(xiàng)目部署到linux服務(wù)器(CentOS?7)的相關(guān)資料,包括項(xiàng)目打包、連接服務(wù)器、安裝和配置Nginx、上傳文件以及配置Nginx,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-01-01
前端vue2中直接拉起vnc客戶端實(shí)現(xiàn)方式
本文介紹Vue項(xiàng)目中協(xié)議檢測工具類與組件的實(shí)現(xiàn),通過封裝檢測邏輯提升復(fù)用性,并展示如何在組件中應(yīng)用工具類進(jìn)行協(xié)議校驗(yàn)與數(shù)據(jù)展示2025-08-08
Vue列表如何實(shí)現(xiàn)滾動到指定位置樣式改變效果
這篇文章主要介紹了Vue列表實(shí)現(xiàn)滾動到指定位置樣式改變效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
vue生成二維碼QR?Code的簡單實(shí)現(xiàn)方法示例
這篇文章主要為大家介紹了vue生成二維碼QR?Code的實(shí)現(xiàn)示例詳情,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

