我正在尝试使用 Fuse js 模糊搜索在 Vue js 中过滤搜索列表。当列表作为数据属性输入时,我可以让它工作,但当我通过 JSON api 获取它时不能。
我正在开发一个电子商务网站,并希望主页有一个产品列表,顶部有一个搜索输入字段。当搜索输入字段为空时,所有产品都应该可见。一旦用户开始输入,产品数组应该根据他们输入的内容进行过滤。
当我将产品数组手动添加到 Vue 实例的数据属性中时,它正在工作,但是当我尝试使用 axios 调用 JSON api 来获取数据时,我无法使用搜索功能。
我相当肯定这个问题与生命周期和异步函数有关,但是,尽管昨天阅读了这些,但我对这些更复杂的问题的理解很差。我尝试将 axios GET 抽象为一个方法,然后在mounted() 中调用它,将其作为计算属性拉入,并对家具进行各种其他重新排列,但我很难过。
这是一个代码笔,搜索作为实例上手动输入的数组工作。
window.Fuse = Fuse;
new Vue({
el: '#app',
mounted() {
var options = {
shouldSort: true,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: [
"title",
"author.firstName"
]
};
this.fuse = new window.Fuse(this.list, options);
this.result = this.list
},
watch: {
search() {
if (this.search.trim() === '')
this.result = this.list
else
this.result = this.fuse.search(this.search.trim())
}
},
data: {
fuse: null,
search: '',
list: [{
title: "Old Man's War",
author: {
firstName: "John",
lastName: "Scalzi"
},{....
}]
result: []
}
});
如果有人可以通过 api 调用演示如何实现相同的结果,我将非常感激,因为我非常卡住,这让我发疯。随附的解释也将非常有价值。