Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 830|Відповідь: 0

[Кутовий голос] Angular Series 18 (32) ControlValueAccessor Керування власними формами

[Копіювати посилання]
Опубліковано 2025-4-30 16:00:55 | | | |
Вимоги: У щоденній фронтенд-розробці форми часто використовуються для додавання та редагування даних через форми. Екземпляр FormGroup може відстежувати набір екземплярів FormControl, і коли створюється FormGroup, кожен контроль у ньому можна відстежувати за його назвою. Як налаштувати керування формою?

Давайте спочатку розглянемо рендери:



Кроки такі:

  • Успадковує інтерфейс ControlValueAccessor
  • Зареєструйтеся у постачальника NG_VALUE_ACCESSOR


Успадковує інтерфейс ControlValueAccessor

Інтерфейс ControlValueAccessor визначає 4 методи, а саме:

  • writeValue: Будь-яка дія значення, яка явно викликає API FormControl, викликає метод writeValue() користувацького контролю форми і передає нове значення як параметр. Він встановлює значення нативного контролю форми. Потік даних походить з Angular form -> Native (власне керування).
  • registerOnChange: реєструє подію onChange, яка викликається при ініціалізації і є функцією тригера події. Яка користь від цієї функції тригера події? Спочатку потрібно зберегти функцію тригера події в registerOnChange і викликати її, коли настане правильний час (наприклад, коли керування отримує введення користувача і потребує відповіді). Цю функцію можна зрозуміти як «API, який використовує викликач для сповіщення керування про зміну даних форми в контролі», тобто для синхронізації інформації в керу. Параметр цієї подійної функції — це значення, яке має отримати форма Angular. Поток даних із рідної форми (власний контроль) -> кутової форми.
  • registerOnTouched: реєструє подію onTouched, яка є функцією зворотного виклику, що активується при взаємодії користувача з керуванням. Ця функція використовується для повідомлення контролю форми, що вона вже торкнулася для оновлення внутрішнього стану зв'язаного FormContorl. Поток даних із рідної форми (власний контроль) -> кутової форми.
  • setDisabledState: Коли стан форми змінюється на або змінюється з DISABLED, API форми викликає метод setDisabledState(), щоб увімкнути або вимкнути відповідний елемент DOM. Потік даних походить з Angular form -> Native (власне керування).


Взаємодія показана нижче:



Насправді, нативні елементи керування формами також мають інтерфейси, схожі на ControlValueAccessor, наприклад, коли Angular зустрічає вхідні або текстові DOM нативні елементи в шаблонах компонентів, він використовує команду DefaultValueAccessor.

Аксесуар
Елемент форми
DefaultValueAccessor
вхід, текстова область
CheckboxControlValueAccessor
input[type=checkbox]
NumberValueAccessor
input[type=number]
RadioControlValueAccessor
вхід[type=радіо]
RangeValueAccessor
input[type=дальність]
SelectControlValueAccessor
Виберіть
SelectMultipleControlValueAccessor
Оберіть[множинно]


Вищенаведене — це Angular Form Control Control, який Angular створив для всіх рідних елементів DOM-форми, а саме вбудований ControlValueAccessor.

Документації:Вхід за гіперпосиланням видно.

Зареєструйтеся у постачальника NG_VALUE_ACCESSOR

Після впровадження інтерфейсу ControlValueAccessor нам також потрібно зареєструвати його як NG_VALUE_ACCESSOR, щоб Angular міг розпізнати та інтегрувати власний контроль форми, інакше з'явиться помилка "RuntimeError: NG01203: Немає доступу до значення для імені контролю форми: 'xxx'".

Документації:Вхід за гіперпосиланням видно.

кодувати

Згідно з кроками, повна робота з кодуванням, ефект — це початкове рендеринг, код виглядає так.

HTML-сторінка:

Код TS:
Посилання:

Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.




Попередній:Короткий вступ до відтворюваної збірки
Наступний:Максимальна довжина варчару, яку SQL Server створює для некластеризованих індексів
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com