Đâ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. binding to a getter that returns a new reference every call
get options() { return { label: this.name } } // new object each CD run
// 2. child changes parent state in ngAfterViewInit
ngAfterViewInit() { this.parent.title = 'ready' }Cách sửa theo thứ tự ưu tiên:
- Tính trước giá trị, đừng tạo object/array mới trong getter hay method gọi từ template. Dùng field, computed() signal, hoặc pipe thuần.
- 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.