Эта статья содержит мои мысли по поводу активного обсуждения запроса комментариев (RFC) Angular на тему « Автономные компоненты, директивы и каналы - делая NgModules Angular необязательными ». Будет полезно, если вы знакомы с фреймворком Angular.

Виртуальный модуль NgModule

С момента зарождения фреймворка NgModules был центральным строительным блоком для приложений Angular. modus operandi для запуска любого нового приложения - создать единственный Angular NgModule с именем AppModule. NgModule - это клей, который объединяет все воедино и помогает фреймворку понять, что ему нужно для запуска приложения.

Хотя само предложение не предлагает удалить NgModules, оно указывает на то, что он становится менее заметным, необязательным или, как описано в обсуждении, «виртуальным».

Они ведут себя так, как будто существует NgModule, который объявил (и экспортировал) рассматриваемый компонент (и только этот один компонент). На практике этого NgModule не существует (или недоступно для разработчиков), и его можно рассматривать как «виртуальный».

Таким образом, эти виртуальные модули NgModules будут существовать как концепции, а не обязательно как логика реализации внутри фреймворка. В результате разработчики теперь могут использовать компоненты, директивы и конвейеры как отдельные конструкции без включения в NgModule.

Автономные компоненты, директивы и каналы

Одна из наиболее частых ошибок новых разработчиков Angular - это забыть импортировать ссылку на NgModule для другого компонента в другой NgModule. Некоторыми распространенными нарушителями являются ReactiveFormsModule или любой из компонентов Angular Material. Однако это очень простая проблема, которую Angular Language Service или ваш друг Google могут помочь вам решить.

Создание для авторов библиотеки способа создания автономных компонентов означает, что вы больше не сталкиваетесь с этими препятствиями. Даже упоминается, что основные модули NgModules, такие как CommonModule, которые экспортируют некоторые из основных директив, таких как *ngFor и *ngIf, и даже AsyncPipe можно использовать без импорта модуля NgModule в ваш проект. . По-прежнему обсуждается, насколько независимой будет CommonModule, если вообще будет.

Автономные компоненты неизбежно сократят кривую обучения, необходимую для использования Angular, поскольку компоненты и многие функции Angular и сторонних библиотек будут работать из коробки. Кроме того, позволяя NgModules медленно исчезать из поля зрения, мы можем начать применять гораздо более детальные подходы к повторному использованию в наших приложениях.

Компоненты динамической / отложенной загрузки

В большинстве простых приложений Angular уже знает, какие компоненты будут видны во время выполнения. Однако в некоторых сложных приложениях вы можете столкнуться с ситуацией, когда вы динамически визуализируете компоненты на лету. Некоторые примеры этого обычно существуют в приложениях приборной панели, где у всех пользователей могут быть разные виджеты во время выполнения.

К сожалению, нелегко динамически или лениво загружать компоненты так, как они вам нужны в Angular. Таким образом, вы получите либо каждый компонент, разделенный на его собственный отдельный модуль NgModule, либо один модуль NgModule, содержащий все компоненты вашего виджета.

Angular уже некоторое время поддерживает ленивую загрузку модулей. Однако предлагаемые изменения позволят команде Angular расширить эту функциональность до уровня компонентов. Таким образом, вместо того, чтобы загружать весь модуль виджетов в свое приложение, вы можете загружать виджеты, которые нужны вашему пользователю во время выполнения, надеюсь, ускоряя время загрузки, без дополнительного веса, связанного с их включением в NgModule.

Я рекомендую вам просмотреть весь RFC и обсуждение, если у вас есть время. Я совсем немного не рассказал. Тем не менее, я очень рад этому, и я знаю, что это очень поможет моим проектам. Хорошего дня!