角度材料2自动完成如果值长度超过某个值,则如何进行api调用

时间:2017-07-14 11:38:19

标签: angular angular-material

对于角度材质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

这是因为基本上我没有返回任何东西,它期望一个可观察的。

1 个答案:

答案 0 :(得分:1)

在您的filteredSites函数中,我不会返回任何内容,而是返回并在那里清空observable。

filterSites(siteURL: string) {

          if(siteURL=='' || siteURL.length < 6)
            return Observable.empty();
}