我设法建立了一个表单,可以在您键入文本时进行搜索并带回结果。
我主要在Angular 6中使用管道,可观测对象和地图。这是我的代码
为我服务
searchName(name:string):Observable<SearchResult[]>{
let headers = new Headers();
headers.append('Content-Type','application/json');
headers.append('Authorization',this.token);
return this.http.get('http://localhost:3000/laptops/search?name='+name, {headers:headers})
.pipe(
.map(res => {
return res.json().data.map(item => {
return new SearchResult(
item.id,
item.name
);
});
})
);
}
以及在我的组件中
ngOnInit() {
this.searchField = new FormControl();
this.results = this.searchField.valueChanges.pipe(
debounceTime(400)
,distinctUntilChanged()
,tap( () => console.log('value ', this.searchField.value))
,switchMap( a => this.mapcmsService.searchName(a))
,tap( () => this.loading = false)
)
}
所以这可行,但是我想控制数据流。我想对数据数据进行拦截:
检查是否没有结果以显示消息。由于我直接将结果传递到this.results
中,因此我想没有办法突然执行if
。但是,如何检查空结果?我可以拥有节点服务器,我可以控制它返回诸如res.json({success:true, data:false, msg:'no results'});
检查表单的文本输入中是否没有值。再次,我在这里没有看到if
选项,如果没有值,我也不想打数据库。
我该怎么办?
谢谢