Ruang penulis
← Kembali ke jurnal
Angular

Menghitung Total Keranjang dengan Angular Signals dan computed

Gunakan signal untuk state yang dapat berubah dan computed untuk total belanja yang mengikuti perubahan jumlah.

DAdministrator · 20 Sep 2026 · 2 menit baca

Saat jumlah barang berubah, subtotal harus ikut berubah. Menyimpan jumlah dan subtotal sebagai dua state terpisah mudah menimbulkan ketidaksesuaian. Simpan data sumber, lalu turunkan subtotal dari data tersebut.

Pada contoh ini harga menggunakan rupiah bulat dan jumlah awal satu. computed membaca signal jumlah sehingga subtotal mengikuti perubahan. Tidak diperlukan subscription manual atau effect yang menulis ulang nilai subtotal.

Contoh implementasi

import { Component, computed, signal } from '@angular/core';

@Component({
  selector: 'app-cart-counter',
  standalone: true,
  template: `
    <p>Quantity: {{ quantity() }}</p>
    <button (click)="decrease()" [disabled]="quantity() <= 1">−</button>
    <button (click)="increase()">+</button>
    <p>Total: Rp {{ total() }}</p>
  `,
})
export class CartCounter {
  readonly price = 25000;
  quantity = signal(1);
  total = computed(() => this.price * this.quantity());

  increase(): void {
    this.quantity.update(value => value + 1);
  }

  decrease(): void {
    this.quantity.update(value => Math.max(1, value - 1));
  }
}

Cara memeriksa

Nilai awal total adalah 25000. Setelah menekan tombol tambah dua kali, jumlah menjadi 3 dan total 75000. Tombol kurang berhenti pada jumlah 1. Batas juga diterapkan di metode, bukan hanya pada status tombol.

Jika harga berasal dari API dan dapat berubah, ubah harga menjadi signal lalu baca price() dalam computed. Jangan mengubah objek di dalam signal secara langsung tanpa pembaruan signal.

Batas contoh

Perhitungan ini hanya untuk tampilan. Server tetap harus menghitung ulang harga dan total ketika pesanan dibuat. Nilai dari browser tidak boleh menjadi sumber harga final.

Referensi

Dokumentasi resmi

← Jelajahi catatan lainnya