【问题标题】:Create html element for every element in array (Angular)为数组中的每个元素创建 html 元素(Angular)
【发布时间】:2019-01-07 19:18:34
【问题描述】:

我有 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", “价值”:“查克·诺里斯知道 WAZZZUP!” }

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

例如这个

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

我试着这样做

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

  }
])

但好像不对。

如何解决我的问题。

谢谢

【问题讨论】:

    标签: javascript html css angular typescript


    【解决方案1】:

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

      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;
        ])
      }
    

    在您的组件模板中使用*ngForbind 用于您的数据:

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

    关于不使用数组的 cmets 更新:

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

      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>
    

    【讨论】:

    • 是不是像:data => { console.log(data) this.jokes = data; })
    • 是的,但我收到错误 Type 'Object' is not assignable to type 'any[]'. The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?
    • 所以也许是 Object 而不是 any?
    • 看起来您的 API 正在返回单个 JSON 对象,而不是对象数组。数组将包含在 []
    • 我会更改 API 代码以返回一个数组而不是它当前返回的单个对象,因为您说 API 正在返回一个数组,这是有道理的。如果您只有一个对象,则使用 *ngFor 将不适用。
    猜你喜欢
    • 2015-12-29
    • 2021-12-08
    • 2020-11-11
    • 1970-01-01
    • 2022-01-02
    • 2023-02-05
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多