меню

Изменяют ли автономные компоненты способ написания кода в Angular?

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

Что такое автономные компоненты в Angular?

Автономные компоненты позволяют разработчикам создавать веб-приложения без необходимости использования NgModule. Они были впервые представлены в версии 14, но только в режиме предварительного просмотра для разработчиков. Начиная с версии 15, автономные API являются частью стабильного API. Их можно полностью использовать с Angular Elements, Router, HttpClient и многими другими.

Кроме компонентов, мы также можем создавать автономные директивы и пайпы.

Создание автономного компонента.

В версии 15 Angular CLI представил команду для легкого создания новых автономных компонентов через:

  
ng g componentName --standalone
 

Они должны быть помечены как standalone: true и не должны быть частью какого-либо ngModule. Если вы попробуете добавить автономный компонент в модуль, Angular выдаст ошибку.

Любые зависимости, необходимые для компонента, могут быть объявлены непосредственно в массиве imports.

  
@Component({
  standalone: true,
  selector: 'app-card',
  imports: [ImageComponent, LayoutComponent],
  templateUrl: './card.component.html',
  styleUrls: ['./card.component.css']
})
export class CardComponent {
  ...
}
 

Любой существующий компонент может быть преобразован в автономный. При этом следует учитывать всего лишь три момента:

  • Добавить standalone: true.
  • Удалить компонент из массива объявлений модуля, в котором он использовался.
  • Использовать массив imports для добавления всех необходимых зависимостей.

Использование автономного компонента.

Автономный компонент, пайп или директива может использоваться внутри другого автономного компонента или внутри модуля. В обоих случаях вы должны добавить его в раздел imports так же, как и обычный NgModule.

 
@NgModule({
  declarations: [CardComponent],
  exports: [CardComponent], 
  imports: [ImageComponent],
})
export class CardsLayoutComponent {
  ...
}
  

Загрузка автономного компонента.

С версии 14 вы можете загрузить всё приложение, используя автономный компонент в качестве корневого компонента приложения. Для этого можно использовать функцию bootstrapApplication в файле main.ts.

 
import {bootstrapApplication} from '@angular/platform-browser';
import {CardComponent} from './card.component';

bootstrapApplication(CardComponent, {
  providers: []
});
 

Затем в файле index.html вы должны заменить app-root на селектор вашего автономного компонента.

  
<body>
  <app-card></app-card>
</body>
  

Настройка инъекции зависимостей (Dependency Injection).

При загрузке вашего приложения с помощью автономного компонента вы можете внедрять сервисы, передавая их в массив providers функции bootstrapApplication:

  
...
bootstrapApplication(AppComponent,{
  providers: [
    {provide: API_URL, useValue: 'standalonecomponents.com/api'},
    {provide: AuthService, useClass: AuthService},
    importProvidersFrom(RouterModule.forRoot(routes))]
});
...
 

Маршрутизация с использованием автономного компонента.

Для создания маршрутов вам нужно создать файл, который будет отвечать за это, и добавить компонент так же, как это делалось ранее.

 
import { CardComponent } from "./card.component";

export const routes: Routes = [
    {
        path: 'card',
        component: CardComponent
    }
];
 

После создания маршрутов вы должны загрузить приложение с помощью автономного компонента и импортировать маршруты в массив providers.

 
import { RouterModule } from '@angular/router';
import { importProvidersFrom, inject, enableProdMode } from '@angular/core';
import {bootstrapApplication} from '@angular/platform-browser';

import { routes } from './routing';
import { AppComponent } from './app/app.component';

bootstrapApplication(AppComponent,{
  providers: [
    importProvidersFrom(RouterModule.forRoot(routes))]
});
  

Ленивая загрузка автономного компонента.

Автономные компоненты могут быть лениво загружены с легкостью. Это можно достичь с помощью использования loadComponent:

  
export const routes: Route[] = [
  {
    path: 'card', 
    loadComponent: () => 
      import('./card.component')
        .then(m => m.CardComponent)},
];
 

Если у вас есть случай, когда вы хотите загрузить сразу несколько маршрутов. Например, у вас есть конечные точки GET, POST и DELETE для компонента карточки, вы можете использовать функцию loadChildren вместо loadComponent.

  
export const routes: Route[] = [
  {
    path: 'card', 
    loadComponent: () => 
      import('./card/card.routes')
        .then(m => m.cardRoutes)},
];
  

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


Возможно, вам будет интересно

15 Angular директив на каждый день

Пользовательские директивы (Custom Directives) - мощная функция в Angular, которая позволяет расширять функциональность HTML-элементов. Они предоставляют возможность создавать повторно используемые компоненты, добавлять функциональность к существующим элементам и улучшать модульность и поддерживаемость вашего приложения на Angular. В этой статье мы рассмотрим пользовательские директивы в Angular и предоставим 15 примеров из реального мира, чтобы помочь вам овладеть этой важной концепцией.

Route. Обновление шаблона

Обновление шаблона при динамическом роутинге и отписка от наблюдения

Angular Routing в Angular 17

Angular Routing представляет собой важную функцию, которая дает возможность разработчикам создавать динамичные и гибкие SPA веб-приложения. Позволяя пользователям без проблем переходить между компонентами, она обеспечивает плавное взаимодействие. В данной статье мы рассмотрим основные принципы маршрутизации в Angular и методы эффективного использования её возможностей.

Angular Interceptor - перехватчик ошибок http

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

Оформление заявки

Документы на создание сайта

Изучите наше коммерческое предложение, заполните БРИФ и отправьте его на почту maxidebox@list.ru. Изучив все пожелания из БРИФ-а, обратным ответом оповестим Вас по стоимости разработке, ответим на вопросы.

КП на создание сайта Коммерческое предложение на созданеи сайта

Мы берем на себя ответственность за все стадии работы и полностью избавляем клиентов от забот и необходимости вникать в тонкости.

Скачать БРИФ (акета) на создание сайта Скачать БРИФ (акета) на создание сайта

Зополните у БРИФ-а все необходимые поля. Сделайте краткое описание к каждому из пунктов анкеты, привидите примеры в соответсвующий пунктах - это позволит лучше понять Ваши ожидания и требования к сайту