Угловые элементы… наконец
Итак, ожидание, наконец, закончилось. Angular Element официально принят с выпуском Angular 6. Я знаю, что ребята из Google, работающие с полимерами, могут сжать нос, но ничего не помогут. Лично я считаю, что это одна из лучших функций, выпущенных командой Angular до сих пор, но это только я.
Прежде чем прыгать дальше, давайте уточним некоторые термины. Элементы Angular - это функция фреймворка Angular, которая позволяет вам превращать обычные компоненты Angular, которые вы используете в своем приложении Angular, в собственные веб-компоненты.
Новые нативные веб-компоненты для оповещения о словах, они являются настраиваемыми элементами и являются частью DOM Javascript API. Вы можете использовать их в приложениях, основанных на ванильном JS, или в приложениях, построенных на другой платформе, короче говоря, они не связаны с Angular.
Но прежде чем начать грызть ногти. Это все еще находится на очень ранней стадии, поэтому на данный момент элементы Angular поддерживаются только внутри приложения Angular, но в будущем их также можно будет внедрить в приложения Vanilla JS.
Пожалуйста, обратитесь к снимку экрана ниже, чтобы увидеть планы на будущее по элементам Angular из официальной документации Angular.
Итак, вы должны спросить, зачем нам нужны элементы angular, когда они, в конце концов, должны отображаться только внутри приложения Angular, ну а пока ниже приведены единственные преимущества, перечисленные в официальных документах.
- Простое динамическое содержимое в приложении Angular. Преобразование компонента в настраиваемый элемент обеспечивает простой путь к созданию динамического содержимого HTML в приложении Angular. HTML-контент, который вы добавляете непосредственно в DOM в приложении Angular, обычно отображается без обработки Angular, если вы не определяете динамический компонент, добавляя свой собственный код для подключения тега HTML к данным вашего приложения и участвуя в обнаружении изменений. С настраиваемым элементом вся эта проводка выполняется автоматически.
- Приложения с богатым контентом. Если у вас есть приложение с богатым контентом, такое как приложение Angular, в котором представлена эта документация, пользовательские элементы позволяют предоставить поставщикам контента сложные функции Angular, не требуя знания Angular. Например, руководство по Angular, подобное этому, добавляется непосредственно в DOM инструментами навигации Angular, но может включать в себя специальные элементы, такие как
<code-snippet>
, которые выполняют сложные операции. Все, что вам нужно сообщить поставщику контента, - это синтаксис вашего настраиваемого элемента. Им не нужно ничего знать об Angular или о структурах данных или реализации вашего компонента.
Слишком много разговоров, правда? время кодирования
Прежде чем мы перейдем к написанию нашего первого элемента angular, нам нужно увидеть проблему в реальном времени.
Предположим, у нас есть такой компонент
и мы получаем этот компонент асинхронно с сервера, в этом случае мы не можем включить его в шаблон, поэтому мы должны передать его как контент, подобный этому
и даже если ваш app.module.ts выглядит так, он не будет отображаться.
Вы можете догадаться, почему? поскольку компонент Angular визуализируется намного раньше, он отправляется в браузер через JIT или AOT. В конечном итоге вы увидите такой экран.
Это потому, что Angular не идентифицирует его как компонент Angular. Надеюсь, вы убедились в том, что мы имеем дело с вариантом использования.
Не беспокойтесь, угловой элемент - это решение. Это позволяет нам в основном взять наш компонент Angular и поместить его в полностью инкапсулированный самозагрузочный html-элемент, который вы можете загрузить в свой Angular, чтобы он заработал.
Итак, давайте подготовим наш комплект, выполните следующие команды, чтобы получить необходимые пакеты.
npm i @angular/elements --save npm i @webcomponents/custom-elements --save
После этого перейдите в файл polyfills.ts и добавьте эти две строки
import '@webcomponents/custom-elements/custom-elements.min' import '@webcomponents/custom-elements/src/native-shim'
Это все, что вам нужно для того, чтобы элементы Angular и веб-компонент работали в вашем браузере.
Теперь измените файл app.component.ts следующим образом
Давайте рассмотрим важные изменения, которые мы внесли в этот файл для рендеринга динамических компонентов.
- Импортируйте инжектор, createCustomElement и DomSanitizer из соответствующих пакетов.
- Создайте пользовательский компонент с помощью createCustomElement из пакета @ angular / elements и передайте инжектор в качестве второго параметра
- Использование API customElements в браузере для создания настраиваемого элемента
- Очистите дом с помощью DomSanitizer
- Наконец, добавьте свой компонент в entryComponents в app.module.ts
Измените файл app.component.html таким образом, чтобы он мог принимать этот динамический веб-компонент в качестве входных данных.
<div [innerHTML]='content'> </div>
Это все, что вам нужно, чтобы превратить ваш обычный угловой компонент в веб-компонент, чтобы быть более безопасным на данный момент угловым элементом.
Если вы выполнили правильную настройку, выполнили мои шаги и у вас все нормально, вы должны увидеть компонент, отображаемый в браузере, как это.
Заключение
Это была моя щедрая попытка продемонстрировать мощь новых элементов Angular. Я надеюсь, что замечательная команда разработчиков Angular заставит его работать за пределами мира Angular, как и настоящие веб-компоненты.
Если вы хотите увидеть полный код, просьба клонировать здесь.