Вы когда-нибудь задумывались, как работает связка форм Angular и HTML элементов, через которые пользователь заносит данные?
С самого начала для этого использовали ControlValueAccessor
— специальный интерфейс, состоящий всего из 4 методов:
interface ControlValueAccessor {
writeValue(value: any): void
registerOnChange(fn: (value: any) => void): void
registerOnTouched(fn: () => void): void
setDisabledState(isDisabled: boolean)?: void
}
Из коробки, Angular имеет несколько таких аксессоров: для чекбоксов и радиокнопок, для инпутов и селектов. Однако, если вы разрабатываете чат, в котором вам нужно дать возможность писать курсивом, делать текст жирным или, допустим, вставлять смайлики — вы, скорее всего, воспользуетесь атрибутом contenteditable
для создания содержимого с форматированием.
В Angular нет поддержки использования форм вместе с contenteditable
, поэтому написать её придётся самим.