구성 요소 - 과일 갤러리

3410 단어 angularcomponents

@Input to send messages from Parent to Child

@Output to send messages from Child to Parent





모든 Application을 Angular로 개발하기 위해서는 구성 요소 간의 Communication 개념을 이해하는 것이 기본입니다.

2가지 구성 요소를 사용하여 과일 목록을 렌더링해야 합니다.

1- 제품 목록

<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>


구성 요소 product-list에서 데이터를 가져오려면 productService 서비스를 호출해야 합니다.

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-제품 카드

<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>



Typescript에서 우리는 product라는 이름의 @Input 속성을 정의해야 합니다. 이것은 상위 구성 요소(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 {}
}



Live Demo
Download Code

좋은 웹페이지 즐겨찾기