我正在尝试使用angular(keyup)事件实现搜索栏。而且我的文件名为
当我在搜索栏中搜索基数@或基数$或基数1时,它会过滤良好。但是当我搜索base#时,它不过滤base#,它会过滤所有带有base的文件名。 这是我下面编码的代码
我的html:
<input type="search" class="form-control" placeholder="Search file" (keyup)="onSearch($event)" [(ngModel)]='searchKeywords'>
我的js代码:
onSearch(event: any) {
const keywords = event.target.value;
if (keywords && keywords.length > 2) {
const apiURL =`abc/thg/hjy?filter[file.name]=${keywords}`;
this.api.get(apiURL).subscribe((data: any) => {
console.log(data);
this.topics = data.list;
if (this.trigger) {
this.trigger.openMenu();
}
});
} else {
this.topics = [];
this.trigger.closeMenu();
}
}
答案 0 :(得分:0)
我注意到您在HTML标记中有一个缺失。
<input type="search" class="form-control" placeholder="Search file" (keyup)="onSearch($event)" [(ngModel)]="searchKeywords">
然后,在.ts
文件中:
onSearch(event: any) {
...
}
答案 1 :(得分:0)
我认为该行的apiURL
中的值已经确定:
const apiURL =`abc/thg/hjy?filter[file.name]=${keywords}`;
我认为问题在于以下几行,您在其中传递#(井号)而未对其进行URL编码。
在下一行使用%23
请求之前,请尝试将其与get
交换出去。
答案 2 :(得分:0)
这成功了。现在我可以传递#了。
onSearch(event: any) {
const keywords = event.target.value;
const params: any = {};
if (keywords && keywords.length > 2) {
params['filter[translations.title]'] = keywords;
const options = {
search: params
};
const apiURL = `abc/thg/hjy`;
this.api.get(apiURL, options).subscribe((data: any) => {
console.log(data);
this.topics = data.list;
if (this.trigger) {
this.trigger.openMenu();
}
});
} else {
this.topics = [];
this.trigger.closeMenu();
}
}