Đây là lỗi chỉ xuất hiện ở dev mode. Sau mỗi vòng change detection, Angular chạy thêm một vòng kiểm tra; nếu giá trị binding ở vòng hai khác vòng một, nghĩa là có gì đó thay đổi state sau khi view đã được kiểm tra — Angular báo lỗi vì view đang hiển thị dữ liệu không nhất quán với model.
Hai nguyên nhân điển hình:
// 1. bind vào getter mà mỗi lần gọi trả về giá trị khác
get timestamp() { return Date.now() } // mỗi vòng CD ra một giá trị mới
// 2. con đổi state của cha trong ngAfterViewInit
ngAfterViewInit() { this.parent.title = 'ready' }Cách sửa theo thứ tự ưu tiên:
- Tính trước giá trị, đừng trả giá trị đổi theo từng lần gọi trong getter hay method gọi từ template (getter trả object mới thì không ném NG0100 — vòng kiểm tra dev coi hai object là bằng nhau — nhưng vẫn tốn change detection). Dùng field, computed() signal, hoặc pure pipe.
- Chuyển việc cập nhật lên sớm hơn — ngOnInit thay vì ngAfterViewInit.
- Nếu bắt buộc phải đổi state sau khi view đã kiểm tra, gọi cdr.detectChanges() ngay tại đó để đồng bộ lại.
- Hạ sách: setTimeout(...) đẩy sang vòng sau — chạy được nhưng gây nháy một khung hình, chỉ dùng khi không còn cách khác.
Lỗi không xuất hiện ở production build, nhưng nguyên nhân gốc vẫn còn — đừng bỏ qua.