В этой статье мы собираемся преобразовать существующие библиотеки angular в веб-компоненты, чтобы их можно было использовать в других фреймворках или библиотеках, таких как React, Vue или даже vanilla Javascript.
Давайте покопаемся в этом…
Что такое веб-компонент?
Веб-компоненты — это набор различных технологий, позволяющих создавать повторно используемые настраиваемые элементы — с их функциональностью, изолированной от остального кода — и использовать их в своих веб-приложениях.
Давайте создадим библиотеку angular
- Следующая команда создаст угловую рабочую область… Она используется для хранения всех связанных приложений и библиотек в одной рабочей области.
ng new my-workspace — create-application false - Перенаправление в каталог проекта и создание демонстрационного приложения для запуска нашей библиотеки
ng generate application demo
Это создаст каталог projects, в котором все наши находятся приложения и библиотеки. - Теперь создадим библиотеку angular
ng generate library my-lib - Мы добавим пример кода.

- Давайте добавим несколько скриптов в package.json для сборки библиотеки
"build:lib": "ng build my-lib" - Это создаст библиотеку и создаст папку в dist/my-lib.
- Теперь мы создали библиотеку, давайте используем ее в нашем демонстрационном проекте.
- Удалите весь код из app.component.html, добавьте тег библиотеки и передайте ему данные person, как показано ниже:
‹lib-my-lib [person]=" человек” (loadComp)=”onComponentLoad($event)”›‹/lib-my-lib› - и в app.component.ts добавить создать объект человека и обработать выходное событие
person = {
name: 'John Doe',
age: 30,
address: '26th Main, Kormanagala, Bagalore, India'
};
onComponentLoad(event) {
console.log(event);
}
- Теперь мы можем запустить код с помощью следующих команд:
npm run build:lib
npm run start
Итак, здесь мы создали простую библиотеку angular, которая принимает некоторые входные данные и выводит некоторые события, которые можно использовать в любом проекте angular в качестве внешнего модуля.
Теперь нам нужно заставить эту библиотеку работать с другими интерфейсными фреймворками или с ванильным javascript…. Давайте сделаем это.
- Давайте добавим новое приложение ng generate application web-component
- ng add @angular/elements
- Обновите app.module.ts, как показано ниже.
- Добавьте MyLibComponent в объявление и entryComponents
- Реализуйте интерфейс DoBootstrap.
- Определите пользовательские элементы, как показано ниже, передайте MyLibComponent и определите имя пользовательского тега.

- Добавьте скрипт для сборки веб-компонента, как показано ниже:
npm run build:lib && ng build web-component — output-hashing none - Приведенная выше команда создаст библиотеку и веб-компонент. (его мы можем увидеть в папке dist)
P.S. здесь добавление — output-hashing none означает, что он не будет присоединять хэш к файлам сборки. - Теперь мы создали веб-компонент, но есть одна проблема, если вы посмотрите на dist/web-component. Сгенерировано много файлов js, использование всех этих файлов в проекте немного утомительно, поэтому давайте объединим эти файлы в один файл .js
- Чтобы связаться с этим, давайте напишем небольшой скрипт, как показано ниже, перед этим установим необходимые dev-зависимости
npm i — save-dev fs-extra concat и создадим папку для запуска веб-компонента в пример проекта и назовите его web-component-demo (это имя папки используется в скрипте, поэтому, если вы хотите изменить его, внесите соответствующие изменения и в скрипт).

- Теперь, когда мы запустим npm run build-web-component, он создаст библиотеку, а затем, используя эту библиотеку, создаст веб-компонент. После этого он объединит все js в один файл и поместит его в web-component-demo.
Теперь наш пользовательский веб-компонент готов! Давайте используем это в примере проекта.
- Поскольку мы уже создали образец папки web-component-demo для использования этого пользовательского веб-компонента.
- Теперь давайте создадим файл HTML, как показано ниже:

3. Мы подключили наш файл веб-компонента и создали div-оболочку
4. Создан элемент с использованием dom API, и обратите внимание, что мы отправляем строковые данные, поскольку он не принимает объект или массивы в качестве аргументов.
5. Итак, нам нужно обработать эти изменения в библиотеке, как показано ниже:

Давайте запустим это сейчас:
- npm run build-web-component
- Откройте index.html с live-server или напрямую из файлового браузера.
Наш вывод выглядит следующим образом:

Для справки проверьте git repo