Я пишу некоторые оболочки для обычных элементов управления формой в моем угловом приложении, написав компоненты / директивы, которые имеют селекторы, такие как 'input [custom-input]'.Благодаря этому я могу настроить публичные методы, которые впоследствии можно будет использовать при проецировании контента.
Мой HTML-код выглядит как
<a-component-that-handles-animating-placeholder-etc>
<input custom-checkbox formControlName="field"/>
</<a-component-that-handles-animating-placeholder-etc>
Преимущество в том, что вход доступен напрямуюк любому компоненту, который может захотеть его использовать, тогда как если бы я написал оболочку, мне пришлось бы реализовать конвейер для каждой функции, например отключенной, например
<custom-input [disabled]="isDisabled"]></custom-input>
Еще одно преимущество заключается в том, что мне не нужно реализовывать новыесредства доступа к пользовательским значениям элементов управления для связывания formcontrolName и осознания фреймворка, когда в действительности реализация пользовательского ввода будет заключаться в том, чтобы просто использовать внутренний ввод, что для каждого элемента управления добавляет много сложности проекту.
Проблема заключается в том, что элемент управления реактивной формы не обновляется с правильным значением, когда флажок установлен и снят.В моем пользовательском компоненте с этим селектором input[custom-checkbox]
я делаю эту логику:
ngAfterViewInit(): void {
this.renderer.setAttribute(this.el.nativeElement, 'type', 'checkbox');
}
Это потому, что я не хочу, чтобы потребители указывали, что этот элемент является флажком дважды, например:
<input type="checkbox" custom-checkbox/>
Но по какой-то причине установка типа после рендера прерывает событие, которое обновило элемент управления формы.Я понятия не имею, почему.
РЕДАКТИРОВАТЬ: я раздвоил один из стековых бликов и повторил мою проблему.https://stackblitz.com/edit/angular-dzqp4k