实现实时搜索功能
在这一步中,你将实现实时搜索功能,以便根据用户输入显示匹配的语句。
- 在
index.html
文件中,在 <div class="search-form">
部分找到 TODO
注释。
- 将
<div class="search-form">
元素内的内容替换为以下代码:
<input
type="text"
id="search"
class="search"
v-model="search"
placeholder="Title Sentence Author"
/>
<ul class="suggestions">
<li v-for="item in filterList">
<span v-html="hightLight(item.poetry_content)" class="poet"></span>
<span class="title">
<span v-html="hightLight(item.title)"></span>
-
<span v-html="hightLight(item.author)"></span>
</span>
</li>
</ul>
这段代码使用 Vue.js 指令根据用户输入动态渲染匹配语句的列表。
- 接下来,在
mounted()
的同级添加以下代码:
mounted() {
this.getData();
},
computed: {
hightLight() {
return (text) => {
if (this.search) {
const reg = new RegExp(this.search, "g");
return text.replace(
reg,
`<span class='highlight'>${this.search}</span>`
);
}
return text;
};
},
filterList() {
let { search, list } = this;
let str = search.trim();
if (str.length == 0) {
return [];
} else {
return search
? list.filter(
(item) =>
item.title.includes(search) ||
item.author.includes(search) ||
item.poetry_content.includes(search)
)
: [];
}
}
},
hightLight
计算属性是一个函数,它将匹配的关键词包裹在 <span class='highlight'>
标签中。filterList
计算属性根据搜索框中的用户输入过滤语句的 list
。
- 保存
index.html
文件并刷新网页。现在你应该能看到实时搜索功能正常工作,显示出匹配的语句并突出显示关键词。
完成后,最终页面效果如下: