Angular Meetup – Telegram
Angular Meetup
137 subscribers
1 photo
1 video
78 links
Телеграмм канал для участников Angular Meetup ( https://ng-meetup.ru ).
Мы хотим развивать Angular, улучшать качество кода и архитектуры, обмениваться знаниями и поддерживать дух взаимопомощи и сотрудничества.
Download Telegram
#blog
Сегодня предлагаю посмотреть две короткие статьи про фичи Angular, которые лично я почему-то пропустил в своё время мимо ушей (и возможно я такой не один).
Первое: директива @empty. Не нужно писать @if (items.length === 0) после итерации @for в темплейте, именно для этого придуман @empty, который сделает всю работу за вас.

Второе: router-фича withComponentInputBinding(), которая позволяет биндить инпуты компонентов из параметров роутера (например id). Плюс в статье показан полезный хак с алиасингом импорта для лучшего разделения обычных input от роутинговых.

@empty - https://blog.devgenius.io/empty-in-angular-the-modern-way-to-handle-empty-states-820476e0e5a4
withComponentInputBinding() - https://learnwithawais.medium.com/this-one-line-change-makes-angular-route-param-binding-crystal-clear-f143faa51f7e
👍3🔥1
#blog Вышел релиз Ngrx 20.
Новые функции, которые отмечают авторы:

- prependEntity - добавляет сущность в начало массива;
- upsertEntity - обновляет сущность;
- withFeature - позволяет работать со store абстрактно;
- withLinkedState - определяет новые сигналы состояния, которые автоматически вычисляются при изменении исходных сигналов;
- @ngrx/signals/testing - упрощенное тестирование.

https://dev.to/ngrx/announcing-ngrx-v20-the-power-of-events-enhanced-dx-and-a-mature-signalstore-2fdm
👍1
#blog
В связи со скорым уходом Angular animations (сейчас в этом разделе документации висит дисклеймер с советом о переходе на нативные CSS анимации), в версии Angular v20.2.0-next.2 представили новые фичи animate.enter и animate.leave. Заточены они под нативные CSS анимации, но упрощают взаимодествие с ними. Среди очевидных плюсов:
- динамический биндинг анимаций
- возможность добавлять несколько анимаций
- использование event listeners
- host binding анимаций

Статья: https://netbasal.medium.com/simplifying-animations-with-angulars-new-native-api-9584b4db316b
1👍53
#blog Слышал ранее, но не доходили руки проверить, как в Chrome мокать ответ сервера.
Вот наткнулся на подробную статью о том, как это сделать.

Возможности:
- позволяет переопределять тело ответа от сервера;
- позволяет переопределять HTTP и Websocket заголовки в ответе сервера как для отдельных end point-ов, так и для всех разом через Apply to: *.

Недостатки:
- не позволяет переопределить тело и заголовки запроса;
- не позволяет подменять статус-код ответа;
- не позволяет подменять Websocket-сообщения.

Так что вывод таков: необязательно поднимать свой мок сервер или ставить сниффер).
https://habr.com/ru/companies/sberbank/articles/923888/
1🔥2
#blog
На 109-м заседании комитет TC39, отвечающий за развитие языка JavaScript, продвинул 11 предложений по различным стадиям стандартизации ECMAScript. Два из них достигли Stage 4 и войдут в следующую официальную версию языка:

* Math.sumPrecise(iterable) — обеспечивает точное суммирование чисел, избегая потери точности из-за округления.

* Методы Uint8Array: toBase64(), fromBase64(), toHex(), fromHex() — добавляют встроенные средства для работы с base64 и шестнадцатеричными строками.

На Stage 3 вышли:
* Iterator.concat(...) — упрощает объединение итераторов.

* Upsert для Map/WeakMap — позволяет безопасно устанавливать значения по умолчанию.

* Immutable ArrayBuffer — добавляет неизменяемые буферы для безопасной и эффективной работы с памятью.

На Stage 2:
* Intl Era/Month Code — поддержка эр и кодов месяцев в формате дат.

* Сохранение конечных нулей в Intl.NumberFormat — улучшает точность форматирования чисел.

* Import Bytes — возможность импорта бинарных файлов как Uint8Array.


Статья: https://socket.dev/blog/tc39-advances-11-proposals-for-math-precision-binary-apis-and-more
👍5
#blog Интересный трюк с ленивой загрузкой шрифтов!
В статье используют ленивую загрузку шрифта через createElement('link') и свойства css font-display: swap.
В итоге это позволяет сразу показывать дефолтные шрифты и постепенно их менять на целевые, избегая проблемы FOIT.
Также это повышает метрики: LCP,FID.
Мне кажется, крайне полезный трюк - нужно брать на заметку.
https://angular.love/lazy-loading-fonts-in-angular-how-to-speed-up-content-rendering
👍5
#blog
Angular 20.1 представил экспериментальный Signal Graph (в официальном расширении)— инструмент для отслеживания зависимостей сигналов в компоненте. В DevTools через вкладку Angular можно включить граф и изучить зависимости сигналов по цветам: синий — обычные, зелёный — computed, красный — linked. При клике на сигнал отображается его текущее значение, имя переменной, тип и количество изменений (epoch). При взаимодействии с интерфейсом граф обновляется в реальном времени, а изменяющиеся сигналы мигают. Это помогает анализировать логику без точек остановки.

Статья - https://blog.angulartraining.com/how-to-use-the-new-signal-graph-in-the-angular-dev-tools-b5b8a0ace6dd
👍2
#blog Вышел минорный релиз Angular 20.2.0
Главное что можно выделить:
- Zoneless стал стабильным;
- Animations deprecated;
- Поддержка typenoscript 5.9.

https://angular.love/angular-20-2-the-recent-changes
🔥5
#blog
На сегодня - большая и глубокая статья о семантическом HTML. Автор рассказывает о разных аспектах и объясняет, почему семантика важна и почему плохо городить страницу из сплошных div. Краткие тезисы:

- Семантический HTML выражает смысл, а не только структуру.
Теги вроде <article>, <nav>, <header> говорят браузерам и агентам, что это за контент.
- Бессмысленная разметка вредит доступности.
Скринридеры и голосовые интерфейсы не могут правильно интерпретировать пирамиду из <div>.
- Семантика улучшает производительность.
Четкая структура DOM ускоряет рендеринг и упрощает работу с анимациями.
- Большие и сложные DOM-деревья замедляют страницу.
Чем больше узлов — тем дольше браузер обрабатывает layout, style и paint.
- Утилитарные классы увеличивают дублирование CSS.
Это замедляет перерасчёт стилей и увеличивает размер файлов.
- Случайные имена классов мешают кэшированию и тестированию.
Например, .jsx-392hf или .tw-abc123 затрудняют анализ и повторное использование.
- Семантика помогает AI-агентам и поисковым системам.
Четкая разметка упрощает извлечение данных и индексацию.
- Семантический HTML — основа надежности.
Даже при сбое JS или стилей, он обеспечивает минимальную функциональность.
- Это не "чистый код" — это инфраструктура.
Семантический HTML — базовый элемент современного веба.

Статья: https://www.jonoalderson.com/conjecture/why-semantic-html-still-matters/
#blog
Интересная статья о странностях CSS, которые мало кому известны. Что внутри:
- В calc() ноль должен быть с единицей измерения (например, `0px`), иначе значение не применится.
- В calc() сложение/вычитание работает только между совместимыми типами; умножение/деление требует числового операнда.
- aspect-ratio может нарушаться, если контент требует больше места.
- Во флекс-контейнере все элементы могут принять наибольшее значение aspect-ratio, если не ограничить их через min-height: 0 или overflow: auto.
- :nth-child(n of selector) выбирает n-й элемент из всех, подходящих под любой селектор в списке.
- position: absolute в грид-контейнере позиционируется относительно ячейки, заданной grid-column и grid-row, а не родителя.

Статья - https://habr.com/ru/companies/ruvds/articles/937094/
2
#blog
В V8 добились более чем двукратного повышения производительности JSON.stringify!
Команда улучшила текущий алгоритм преобразования.
Если данные подходят под критерии, то они форматируется по-новому, иначе - по-старому.
Условия, при которых сработает улучшенный алгоритм:
- запуск JSON.stringify() с одним аргументом;
- объект не должен иметь переопределенного метода .toJSON();
- отсутствие индексированных свойств у объектов, например, {0: "hello"};
- строки должны быть простыми (например, в них не должно быть emoji).

Кажется, что под эти правила подходит 99% кода)
Обновление доступно начиная с Chrome 138.
https://v8.dev/blog/json-stringify
🔥8
#blog Интересная статья, показывающая разницу между Observables и Signal.
Автор на пальцах показывает разницу между pull и push моделями и область применения каждой из них.
Понимание этого будет полезно при разработке архитектуры.

https://dev.to/lcsga/angular-signals-dont-replace-observables-pull-vs-push-49l7
👍7
#blog
ESLint получил поддержку многопоточного линтинга через флаг --concurrency, который ускоряет работу за счёт распределения задач по ядрам процессора. Флаг --concurrency=auto выбирает оптимальное число потоков автоматически. Обновление, ждавшее своего часа почти 10 лет, позволяет сократить время линтинга в крупных проектах на 30–60%, а в некоторых случаях — более чем в 3 раза. Доступно для использования с ESLint v9.34.0

Статья - https://socket.dev/blog/eslint-adds-support-for-parallel-linting
Официальный блог - https://eslint.org/blog/2025/08/eslint-v9.34.0-released/
#blog
У меня вышла статья на Хабре (моя первая), под эгидой Т-Банка, разумеется.
Повествую о спецификации CSS Color 4 и новых цветовых пространствах, которые она нам приносит. Поддержка популярными браузерами уже давно есть, поэтому пользоваться всем этим можно без особых опасений.

Читать здесь - https://habr.com/ru/companies/tbank/articles/948450/
14🔥3
#blog
🚀 Angular анонс: сигнальные формы — будущее уже здесь!
Недавно в Angular влили экспериментальную ветку Signal Forms — одной из самых ожидаемых новинок.
Это обновление обещает упростить работу с формами, убрав боль, знакомую каждому Angular-разработчику:
* громоздкие FormGroup и FormControl
* ручные подписки на valueChanges
* дублирование валидаторов
* бесконечные блоки if/else для вывода сообщений об ошибках
Формы теперь работают напрямую со сигналами, делая код чище и лаконичнее. И это только начало!
О том, как это работает с реальным примером, читайте в статье: https://medium.com/@schnabelelisa0/angular-signal-forms-the-most-awaited-feature-is-here-161fd722f573
🔥61
#blog
Подробная и понятная статья, способная закрыть пробелы знаний в области делегирования событий в JS (либо освежить в памяти). Тезисно:
- Описан механизм всплытия событий, и три их фазы: захвата, цели и всплытия, что лежит в основе делегирования.
- Делегирование улучшает производительность, упрощает поддержку кода и корректно работает с динамически создаваемыми элементами.
- Описаны частые ошибки: путаница между event.target и event.currentTarget, некорректное использование stopPropagation().
- Рассмотрены нюансы работы событий в Shadow DOM, а также события, которые не всплывают (focus, blur, mouseenter, mouseleave), и способы их обработки.
- Приведены примеры реализации делегирования во фреймворках: React (синтетические события), Vue, Svelte и Angular.

Статья: https://habr.com/ru/companies/timeweb/articles/940722/
2
#blog
Для тех, кто подумывает об обновлении TypeScript до 5.9, но не видит в этом больших плюсов - данная статья, заголовок которой гласит "Обновляться стоит". Если совсем кратко:
- Новый tsc --init генерирует минималистичный конфиг с strict: true по умолчанию — теперь строгая типизация это стандарт.
- Производительность улучшена на 11% за счёт кэширования сложных типов — быстрее проверка, отзывчивее IDE, компактнее сборки.
- import defer откладывает загрузку тяжёлых модулей, но пока требует поддержки сборщика — работает только с namespace-импортами.
- Раскрываемые подсказки (expandable hovers) позволяют исследовать сложные типы прямо в редакторе, не теряя контекст.
- Философия обновления — улучшать повседневный опыт, а не добавлять громкие фичи. Главное — удобство, скорость и меньшая нагрузка на разработчика.

Статья: https://blog.logrocket.com/upgrade-to-typenoscript-5-9/
3
#blog

Сигналы
в Angular часто вызывают путаницу из-за того, что разработчики пытаются мыслить в терминах RxJS. Мы ожидаем, что сигналы будут вести себя как потоки и автоматически обновлять DOM, но это совсем не так.

Вернёмся к основам и подробно разберём:
- почему сигналы — не Observables, и как правильно мыслить в «сигнальной» парадигме;
- как на самом деле работают computed и effect, и почему путать их — частая ошибка;
- что важно знать о мутабельности и методах .set() / .update();
- когда сигналы упрощают жизнь, а когда лучше остаться с RxJS.

Автор помогает переосмыслить сигналы не как «упрощённые стримы», а как другой способ управления состоянием в Angular — понятный, предсказуемый и, при правильном использовании, действительно удобный.
Ссылка на статью: https://medium.com/@julias3/the-most-misunderstood-concept-in-angular-signals-1929f5c27c13
🔥5
#blog
Вышла Node.js 25.0 — промежуточная версия (не LTS), поддержка до июня 2026.
- Node.js 24.x (LTS) поддерживается до апреля 2028, 22.x — до апреля 2027, 20.x — до апреля 2026.
- V8 обновлён до 14.1 (Chromium 141): ускорен JSON.stringify, оптимизированы WebAssembly и JIT, добавлены методы для base64/hex-преобразований Uint8Array.
- Добавлена опция --allow-net в Permission Model — без неё сетевые операции блокируются с ошибкой ERR_ACCESS_DENIED.
- API Web Storage (localStorage, sessionStorage) включён по умолчанию, статус «экспериментальный» снят.
- ErrorEvent стал глобальным — доступен без импорта, совместим с браузерами.
- WebAssembly поддерживает JSPI — позволяет вызывать асинхронные Web API из синхронного кода.
- Добавлена опция NODE_COMPILE_CACHE_RELATIVE_PATH — кэш компиляции работает при переносе проекта благодаря относительным путям.
- Реализовано встроенное профилирование нагрузки на CPU.
- Обновлён npm до версии 11.6.2.
- Удалён SlowBuffer из-за уязвимостей — вместо него использовать Buffer.allocUnsafeSlow().

Статья - https://habr.com/ru/news/957966/
4
#blog

Реактивность в Angular без чёрной магии

Многие Angular-приложения работают словно по волшебству — но за этим стоит “грязная проверка” и Zone.js. Автор данного материала разбирает, почему это плохо для производительности и как избежать проблем с асинхронными изменениями данных.

На практике Signals + OnPush + Zoneless позволяют уведомлять Angular о том, где и когда произошли изменения, без лишних циклов Change Detection и без monkey patching. А иммутабельность помогает защитить данные и упростить тестирование.
Простые примеры, объяснения и рекомендации — всё это вы найдёте в статье «Reactivity in Angular» (https://medium.com/@eugeniyoz/reactivity-in-angular-844444741c7e)
🔥5
#blog
Сегодня посмотрим обновления в Chrome 143 beta. Список немалый, поэтому постараюсь изложить сжато:
- Добавлены CSS @container anchored(fallback) для стилизации привязанных элементов по позиции.
- Исправлены underlineStyle и underlineThickness в EditContext (`solid`, dotted, wavy и др.).
- DOM API теперь разрешает больше символов в именах элементов и атрибутов.
- На мобильных `eager`-предзагрузка срабатывает при кратковременном появлении ссылки во вьюпорте.
- Поддержка font-language-override — контроль OpenType-глифов по языковому тегу.
- WebGPU: swizzle текстур — перестановка цветовых каналов в шейдерах.
- ICU 77: Unicode 16, новые правила форматирования (итальянские числа без точки, запятая после дня в en-локалей).
- dataTransfer теперь доступен вмотрим обновления в Chromeдля contenteditable (как в Safari/Firefox).
- FedCM: IdP может возвращать JSON вместо строк — проще интеграция с OAuth2/OIDC.
- WebTransport: согласование протокола при установке соединения.
- Web Smart Card API (только Isolated Web Apps): доступ к смарт-картам через ОС.
- Manifest: предсказуемое обновление, иконки с immutable.
- Heavy Ads: отчёты теперь приходят и во встраиваемый фрейм — проще отслеживать плохую рекламу.
- Origin Trials: выпуск цифровых сертификатов в кошелёк, рандомизация лимитов TCP-сокетов против отслеживания.
- Депрекации: устаревшие геттеры Intl.Locale, удаление XSLT из-за уязвимостей и низкого использования.

Статья - https://developer.chrome.com/blog/chrome-143-beta?hl=en
2