对于角度材质2自动完成组件,如果值长度大于某个值,我该如何调用API?
我曾尝试检查do()
内部以及switchMap()
内部,但是如果输入值的长度小于6,那么它会抛出一个错误,然后无论我输入什么内容它都没有。根本不回应价值变化。
这是我的代码:
this.sites = this.searchForm.get('siteURLInput').valueChanges
//.startWith(null)
.debounceTime(1000)
.distinctUntilChanged()
.do(_ => {
debugger;
if ( this.searchForm.get('siteURLInput').value.length < 6)
return;
})
// .switchMap(searchTerm => this.filterSites(searchTerm)) //switchMap automatically unsubscribes from any previous observable when a new event comes down the stream.
.switchMap((searchTerm:string) => {
debugger;
if (searchTerm!=null && searchTerm.length > 5) {
return this.filterSites(searchTerm);
}
// else {
// return Observable.empty();
// }
}
)
.do(_ =>
{
console.log(this.sites);
})
.catch(this.handleSiteServiceError);
filterSites(siteURL: string) {
console.log('filterSites starting...' + siteURL);
debugger;
if(siteURL=='' || siteURL.length < 6)
return;
this.filteredSites = this.spWebApiService.getSitesByName(siteURL);
console.log('filteredSites:' + this.filteredSites);
return this.filteredSites;
}
实际上,问题是每当我在自动填充组件中出现错误时,它就不再响应了。
例外是:
TypeError:您提供了&#39; undefined&#39;预期流的地方。您 可以提供Observable,Promise,Array或Iterable。 在Object.subscribeToResult
这是因为基本上我没有返回任何东西,它期望一个可观察的。
答案 0 :(得分:1)
在您的filteredSites函数中,我不会返回任何内容,而是返回并在那里清空observable。
filterSites(siteURL: string) {
if(siteURL=='' || siteURL.length < 6)
return Observable.empty();
}