使用Angular 8和httpclient获取“无法读取未定义的属性'of',”

时间:2019-09-19 14:45:01

标签: angular http httpclient angular-httpclient

我已使用以下服务为项目配置了新的httpclient。 AppModule.ts设置正确

getAllLocosByID(locoID: string) {
    return this.http.get<Search[]>(`${environment.apiUrl.searchbylocoid}/${locoID}`);
}

也将搜索设置为

export class Search {
    input: string;
    warningMessages: String[];
    errorMessages: String[];
    numFound: number;
    results: String[];
    APP_CODE: string;
}

我的组件上有

logoSearchResults: Search[];
constructor(private data: DataAccessService) { }    
getLocmotives() {
    this.data.getAllLocosByID('A1').subscribe((res: Search[]) => {
    // console.log(Array.of(res));
    // console.log(typeof (response));
    // this.logoSearchResults = res;
    this.logoSearchResults = { ...res };
    console.log(this.logoSearchResults);
 },
  error => {
    console.log("error");
  })
}

可让我在浏览器控制台上关注以下内容。基于httpclient文档,返回的响应已经是一个可观察的json,我将其形成为Search[]

{input: "A1", warningMessages: Array(0), errorMessages: Array(0), numFound: 241, results: Array(3), …}

到目前为止,太好了!但是让我们将其放在HTML部分上,并显示给最终用户

我在可以点击的HTML上放置了一个按钮

<button class="btn btn-primary" (click)="getLocmotives()">
   Give me answer
</button>
{{ logoSearchResults }}

这是我在{{ logoSearchResults }}上看到的内容

[object object]

通过更新HTML代码以遍历此数组

<ul class="list-group">
  {{ logoSearchResults }}
  <li class="list-group-item" *ngFor="let result of logoSearchResults">
     {{ result }}
  </li>
</ul>

我遇到以下错误

ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

通过将HTML代码更新为

<ul class="list-group">
 {{ logoSearchResults }}
 <li class="list-group-item" *ngFor="let result of Array.of(logoSearchResults)">
    {{ result }}
 </li>

我遇到以下错误

ERROR TypeError: Cannot read property 'of' of undefined

我应该在HTML或角形部分中做什么才能在scree上显示我的数据?

3 个答案:

答案 0 :(得分:1)

您应该将数组添加到ngfor:* ngFor =“让logoSearchResults.results的结果”

答案 1 :(得分:0)

尝试

<pre>{{ logoSearchResults | json}}</pre>

json管道将显示您的确切json。

 还将对齐json以使其可读。

答案 2 :(得分:0)

这是问题所在 this.logoSearchResults = {... res}; 您将res放入对象中。您不能在一个对象上使用of循环。而且我看到您的服务

this.http.get<Search[]>

应该返回搜索数组,所以您应该拥有

this.logoSearchResult=res;

然后在循环中更改为

{{ result|json }}