Задача

Список с ChangeDetectionStrategy.OnPush не обновляется после добавления элемента. Объяснить причину и исправить.

@Component({
    selector: 'todo-list',
    template: `
        <div *ngFor="let t of todos">{{ t.title }}</div>
        <button (click)="add()">Add</button>
    `,
    changeDetection: ChangeDetectionStrategy.OnPush,
})
export class TodoListComponent {
    @Input() todos: Todo[] = [];
 
    add(): void {
        this.todos.push({ title: 'New' }); // мутация — вид не обновится
    }
}

Проблемы

Решение

См. также