【问题标题】:Angular ngbTypeahead gives [Object] errorAngular ngbTypeahead 给出 [Object] 错误
【发布时间】:2020-10-24 11:49:27
【问题描述】:

我的 component.html(输入字段)

<input type="text" class="form-control" [(ngModel)]="searchQuery" [ngbTypeahead]="recommends"
    name="searchQuery" typeaheadOptionField="username">

我的组件.ts

  this.recommends = (text$: Observable<string>) => {
    return text$.pipe(
      debounceTime(200),
      distinctUntilChanged(),
      switchMap((searchText) => this.stats.getSearchCompletion(searchText))
      );
}

我的 getSearchCompletion 函数

  getSearchCompletion(searchQuery) {
   if(searchQuery) return this.http.post(backendURL + '/my/route', { searchQuery: searchQuery }, { headers: this.headers }).pipe(map(res => res.json()));
}

repsonse 以如下格式返回:

[{
 "username": "test"

},
{
 "username": "test2"
}]

我收到以下错误: To Image

我猜这是因为我的服务器响应在一个列表中有多个对象。但是如何将 ngbTypeahead 绑定到例如用户名?我试过typeaheadOptionField="username",这给了我错误。列表弹出,但没有条目。

【问题讨论】:

    标签: html node.js angular typescript ng-bootstrap


    【解决方案1】:

    您可以使用一些 javascript 技巧将响应转换为纯字符串数组,如下所示

       if(searchQuery) return this.http.post(backendURL + '/my/route', { searchQuery: searchQuery }, { headers: this.headers }).pipe(map(res => {
       let arr:string[] = [];
       res.json().forEach(x=>{
           arr.push(x['username']);
       });
    
        return arr;
    
       }));

    这是基于您的 api 响应采用这种格式的假设

    [{ "username": "test"},{ "username": "test2"}]
    

    这是一个对象数组。

    谢谢。

    【讨论】:

    • 我收到以下错误:“响应”类型上不存在属性“forEach”
    • 将问题标记为已回答,以便对其他用户有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多