Я создаю пользовательские элементы управления формой, реализуя ControlValueAccessor
. Я хочу, чтобы примитивные пользовательские элементы управления формой были компонуемыми, а элементы управления более высокого порядка основаны на этих примитивах.
Простой пример:
Допустим, я создал пользовательский DateField
из управления, он состоит только из <input />
.
Затем я создаю пользовательский элемент Calendar
из элемента управления, это компонент календаря со своей собственной внутренней сложностью с набором <div>
s и <button>
s в качестве шаблона.
Затем я хочу создать пользовательский элемент DatePicker
из элемента управления, составляющий компоненты DateField
и Calendar
.
Внутри элементов управления формы мне нужно обработать опции updateOn
путем правильной реализации уведомлений touched
.
Для DateField
это просто, пример в документе говорит об этом, просто уведомляйте о касании, когда размытие ввода.
Для Calendar
это немного менее просто, но выполнимо, проверяя, размывается ли кнопка, и следующий сфокусированный элемент не находится внутри Calendar
.
Таким образом, эти два элемента управления формой могут легко соответствовать опциям updateOn
.
Давайте теперь посмотрим на DatePicker
. Он состоит из DateField
и Calendar
, поэтому для правильной обработки уведомлений о касании мне нужно активировать его, когда DateField
и Calendar
теряют фокус. Я не могу просто слушать изменения событий, потому что даже если они всплывают, это нарушит конкретный механизм прикосновения, предоставляемый Calendar
пользовательским элементом управления формы.
Когда я создаю эти два элемента управления формой, у меня есть доступ к их FormControl
моделям. Свойство FormControl#touched
удобно, но бесполезно в моем случае, потому что мне нужно было бы «прослушивать» изменения касания, но, похоже, они не являются такими событиями или потоками.
Я не нашел хорошего способа добиться этого с помощью простых ControlValueAccessor
реализаций. Итак, я пришел к созданию специализированного вывода на моих пользовательских элементах управления формой, чтобы они могли вызывать «прикосновенные» уведомления, но это неудовлетворительно, потому что если я поделюсь своими таможенными элементами управления формой, нужно научиться использовать угловые формы, а затем изучить мой специализированный вывод и что это значит.
Возможно, я что-то упустил, и я надеюсь, что кто-то мог бы помочь, предоставив свой взгляд на эту проблему.