Проблема в том, что вы не добавляете функцию trackBy
в *ngFor
. Это делает весь DOM списка воссозданным, когда вы делаете mousedown, так что click
никогда не срабатывает, потому что элемент уничтожен.
См. здесь для рабочего примера:
trackBy(idx: number, item: { id: number }): number {
return item.id;
}
шаблон:
<ul formArrayName="items"
*ngFor="let item of exampleForm.controls.items.value; let i = index;trackBy: trackBy">
Для получения дополнительной информации вы можете прочитать мой ответ на эту тему. В основном происходит то, что ссылка exampleForm.controls.items.value
меняется с каждым происходящим событием.
Другим решением может быть использование changeDetection: ChangeDetectionStrategy.OnPush
в объявлении компонента. Я рекомендую вам использовать trackBy
и OnPush
для максимального улучшения производительности. Имейте в виду, что это может потребовать рефакторинга в вашем текущем коде приложения.
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.scss"],
changeDetection: ChangeDetectionStrategy.OnPush
})
стек