Komponenty - Galerie ovoce

Pochopení konceptu komunikace mezi komponentami je základem pro vývoj jakékoli aplikace v úhlovém provedení.

Musíme vykreslit seznam ovoce pomocí 2 komponent:

1- seznam produktů

<div class="container" id="navbar-container">
  <section class="section">
    <div class="container">
      <div class="has-text-centered" id="services-text-container">
        <h1 class="title is-1">Gallery of Fruits</h1>
      </div>
      <br />
      <div class="columns">
        <app-product-card
          *ngFor="let item of record"
          [product]="item"
        ></app-product-card>
      </div>
    </div>
  </section>
</div>

V seznamu komponentových produktů musíme zavolat službu productService, abychom získali data.

import { Component, OnInit } from '@angular/core';
import { Record } from 'src/app/model/record';
import { ProductService } from 'src/app/services/product.service';

@Component({
  selector: 'app-product-list',
  templateUrl: './product-list.component.html',
  styleUrls: ['./product-list.component.scss'],
})
export class ProductListComponent implements OnInit {
  record: Record[] = [];
  constructor(private productService: ProductService) {}

  ngOnInit(): void {
    this.getProducts();
  }

  getProducts(): void {
    this.productService.getProducts().subscribe((data) => {
      this.record = data.record;
    });
  }
}

2-produktová karta

<div class="column">
  <div class="card">
    <div class="card-content">
      <div class="has-text-centered">
        <img [src]="product.image" />
      </div>
      <h3 class="title is-3 has-text-centered" id="card-product-description">
        {{ product.name }}
      </h3>
      <p class="has-text-centered">
        {{ product.description }}
      </p>
    </div>
  </div>
</div>

V Typescriptu musíme definovat @Input vlastnost s názvem product, bude přijímat data z nadřazené komponenty (product-list).

import { Component, Input, OnInit } from '@angular/core';
import { Record } from 'src/app/model/record';

@Component({
  selector: 'app-product-card',
  templateUrl: './product-card.component.html',
  styleUrls: ['./product-card.component.scss'],
})
export class ProductCardComponent implements OnInit {
  @Input() product!: Record;
  constructor() {}

  ngOnInit(): void {}
}

Živá ukázka

Stáhnout kód