# 07. 資料篩選
可透過選單或關鍵字篩選資料,再呈現到畫面上:
上個單元的 input
用來增加資料,這個單元的 input
則用來進行資料篩選。主要使用 Vue 的 computed
功能去處理要呈現到畫面的資料。
# 摘要
- 依選單類型篩選資料:使用
computed
增加typeMenu
去回傳篩選後符合的資料。 - 依輸入的關鍵字篩選資料:在
typeMenu
裡面比對關鍵字,產生新的titleMenu
。
# 依選單類型篩選
如果 input
類型為 " 全部 ",則顯示原本的 menu (this.menu
)。否則,就從 menu 中篩選出與 input
類型一樣的資料。
computed(){
typeMenu() {
if (this.input.type === "全部") {
return this.menu;
} else {
return this.menu.filter(item => {
return item.type === this.input.type;
})
}
}
}
# 依關鍵字篩選
如果沒有輸入 title ,則依照 typeMenu 的結果執行。 否則,就選出 typeMenu 的資料中,與 input 有同樣字串的資料。
titleMenu() {
if (this.input.title) {
return this.typeMenu.filter(item => {
return item.title.toLowerCase().indexOf(this.input.title.toLowerCase()) != -1
})
} else {
return this.typeMenu;
}
}
做文字比對時,要讓大小寫一致,所以用 toLowerCase()
將文字都轉成小寫。而 indexOf()
的值 != -1
表示有找到資料,則該筆資料會被保留下來。
以上程式碼再使用變數簡化:
titleMenu() {
if (this.input.title) {
return this.typeMenu.filter(item => {
let content = item.title.toLowerCase();
let keyword = this.input.title.toLowerCase();
return content.indexOf(keyword) != -1
})
} else {
return this.typeMenu;
}
}