首页 > 解决方案 > 为数组中的每个元素创建 html 元素(Angular)

问题描述

我有 Angular 组件

这是代码

    @Component({
  selector: 'app-testcomponent',
  templateUrl: './testcomponent.component.html',
  styleUrls: ['./testcomponent.component.scss']
})
export class TestcomponentComponent implements OnInit {

  version: string = environment.version;
  error: string;
  searchForm: FormGroup;

  constructor(
    private formBuilder: FormBuilder,
    private http: HttpClient
    ) {
    this.createForm();
   }

  ngOnInit() {}

  search() {
    this.http.get('https://api.chucknorris.io/jokes/search?query='+this.searchForm.value.jokevalue ).subscribe(
    data => [
      console.log(data)
    ])
  }

  private createForm() {
    this.searchForm = this.formBuilder.group({
      jokevalue: ['', Validators.required],
    });
  }
}

函数search()与从 API 获取值以及在提交按钮上为数组中的每个元素制作 HTML 标记有关。这是模板HTML

<div class="container-fluid">
  <form class="form-inline" (ngSubmit)="search()" [formGroup]="searchForm" novalidate>
      <label for="text">Enter value:</label>
      <input formControlName="jokevalue" style="margin-left:20px;" type="text" class="form-control" id="email">
      <button style="margin-left:20px;" type="submit" class="btn btn-primary">Submit</button>
  </form>

获取数组已完成,这是一个响应数组

{“类别”:空,“icon_url”:“ https://assets.chucknorris.host/img/avatar/chuck-norris.png ”,“id”:“cq6hLP0ETeW4VSrm7SYg5A”,“url”:“ https:// api.chucknorris.io/jokes/cq6hLP0ETeW4VSrm7SYg5A ", "value": "Chuck Norris 知道 WAZZZUP!" }

所以现在我需要从数组中循环(它可以有多个元素)并为每个元素创建 HTML 标记

例如这个

<div>
<p>Number of array element</p>
<p>"value"</p>
</div>

我试着这样做

 data => [
  for (let i = 0; i < data.length; i++) {

  }
])

但是好像不对。

我怎样才能解决我的问题。

谢谢

标签: javascripthtmlcssangulartypescript

解决方案


在组件源中公开您的数据:

  public jokes: any[]; //or create an interface instead of using "any" for "strong" typing support

  search() {
    this.http.get('https://api.chucknorris.io/jokes/search?query='+this.searchForm.value.jokevalue ).subscribe(
    data => [
      console.log(data)
      this.jokes = data;
    ])
  }

在你的组件模板中使用*ngFor来绑定你的数据:

<div *ngFor="let joke of jokes">
    <p>{{joke.category}}</p>
    <p>{{joke.value}}</p>
</div>

更新关于不使用数组的评论:

在组件源中公开您的数据:

  public joke: any; //or create an interface instead of using "any" for "strong" typing support

  search() {
    this.http.get('https://api.chucknorris.io/jokes/search?query='+this.searchForm.value.jokevalue ).subscribe(
    data => [
      console.log(data)
      this.joke = data;
    ])
  }

组件模板:

<div>
    <p>{{joke.category}}</p>
    <p>{{joke.value}}</p>
</div>

推荐阅读