TGViewer
katsuba.dev katsuba.dev @igor_katsuba · 601 subscribers
Post #697 460
Как проверить, что элемент — это инпут?

Годами ответ Angular был такой:


element.tagName === 'INPUT'


Строка. Сравнение. Всё.

В открытом PR #69452 он становится другим:


customElements.get(el.tagName.toLowerCase())
?.formAssociated === true


Разница не косметическая. Раньше фреймворк знал список нативных элементов — он был зашит в исходники. Теперь он идёт спрашивать у браузера, что умеет вот эта штука в DOM.

Повод: Signal Forms в упор не видят веб-компоненты. Сделал <my-range> с static formAssociated = true, честно поднял ElementInternals, всё по спеке — Angular считает его дивом.

Дальше самое любопытное. Как понять, поддерживает ли компонент min и max? Интерфейса нет, спросить не у кого. Решение — читаем статику класса и гадаем по списку наблюдаемых атрибутов:


observedAttributes?.includes('min')
&& observedAttributes?.includes('max')


Раз подписался на изменения min — наверное, как-то его обрабатываешь.

Наверное.

observedAttributes — это про реактивность, а не про возможности. Реализовал min/max свойствами, атрибуты не объявил — не прошёл. Молча. Без ворнинга. Просто атрибут не отрендерится, и ты час смотришь в DevTools.

Что тут произошло, если отойти на шаг: граница нативного в Angular перестала совпадать со спекой HTML. Раньше закрытый список. Теперь — проверяемое свойство, которое любой может себе выдать

Направление правильное. Реализация — эвристики поверх эвристик

🔗 github.com/angular/angular/pull/69452
GitHub feat(forms): add signal forms support for custom elements by kyubisation · Pull Request #69452 · angular/angular Closes #69232 PR Checklist Please check if your PR fulfills the following requirements: The commit message follows our guidelines: https://github.com/angular/angular/blob/main/contributing-docs/c...
  • 👍 3
  • 🤔 2
More from @igor_katsuba
  1. Sep 23, 2026🔧 Как подготовиться к модернизации кода с помощью AI AI-системы теперь переводят многолет…
  2. Sep 22, 2026✨ Что стоит задача на Opus 5.5 Цена задачи складывается не только из цены за токен — важны…
  3. Sep 17, 2026Ни одна неделя не обходится без релиза новой модели, но эта неделя принесла нам не совсем…
  4. Aug 14, 2026Вчера я нашёл TermDOM — настоящий DOM с настоящим CSS-движком, отрисовываемый в терминале.…
  5. Aug 11, 2026🚀 @ngguide/ui 1.0.0 — переехали на Angular 22 UI Kit по Material 3 обновился до Angular 2…
  6. Aug 10, 2026Roost — подписал, нотаризовал, положил в brew. Можно брать. Нативное приложение под macOS…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →