Study
Angular

Component Communication: @Input & @Output

Penjelasan

@Input() menandai properti class supaya bisa diisi dari LUAR component (dari induk, lewat property binding) — setara props di React/Vue. @Output() dipasangkan dengan EventEmitter untuk mengirim event kembali ke induk — setara emit di Vue atau callback props di React.

Contoh Konsep

// tombol-suka.component.ts
import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
    selector: 'app-tombol-suka',
    standalone: true,
    template: `<button (click)="handleKlik()">Suka</button>`,
})
export class TombolSukaComponent {
    @Input() judul = '';
    @Output() disukai = new EventEmitter<Date>();

    handleKlik() {
        this.disukai.emit(new Date());
    }
}

// Dipakai di template induk:
// <app-tombol-suka [judul]="'Artikel Pertama'" (disukai)="handleDisukai($event)" />

Praktikum

Buat component KartuProdukComponent dengan @Input() nama (string) dan @Output() ditambahkan (EventEmitter<void>) yang di-emit saat tombol "Tambah ke Keranjang" diklik. Tulis contoh pemakaiannya di template induk dengan [nama] dan (ditambahkan).

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Properti @Output() SELALU harus di-inisialisasi dengan new EventEmitter<TipeData>() saat dideklarasikan — beda dengan @Input() yang cukup diberi nilai default biasa (atau dibiarkan undefined lewat tanda tanya), @Output() butuh instance EventEmitter yang benar-benar ada supaya emit() bisa dipanggil.