Skip to content

Latest commit

 

History

History
756 lines (504 loc) · 59.6 KB

Cобеседование по Angular. 100 вопросов.md

File metadata and controls

756 lines (504 loc) · 59.6 KB

Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется.

Если вам интересно мое резюме: https://github.com/DEBAGanov

1. Каковы различия между декоратором Angular и аннотацией?

Декораторы и аннотации в Angular имеют различные функции и синтаксис.

Декораторы в Angular используются для добавления метаданных к классам, методам, свойствам и параметрам. Они представляют собой специальные функции, которые применяются к элементам кода с помощью символа @. Декораторы позволяют определить различные аспекты поведения и конфигурации элементов Angular, таких как компоненты, сервисы, директивы и т. д. Некоторые из наиболее часто используемых декораторов в Angular включают @Component, @Directive, @Injectable и @Input.

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

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

2. Что такое AOT-компиляция в Angular (Ahead-of-Time компиляция)?

AOT-компиляция (Ahead-of-Time компиляция) в Angular - это процесс преобразования кода Angular HTML и TypeScript в эффективный JavaScript-код во время этапа сборки перед запуском в браузере

Основное отличие AOT-компиляции от JIT-компиляции (Just-in-Time компиляции) заключается в том, что при AOT-компиляции код Angular преобразуется в JavaScript до запуска приложения, в то время как при JIT-компиляции преобразование происходит во время выполнения приложения в браузере.

Преимущества AOT-компиляции в Angular включают:

  • Улучшенную производительность: AOT-компиляция позволяет уменьшить размер и сложность кода, что приводит к более быстрой загрузке и выполнению приложения.
  • Более раннее обнаружение ошибок: AOT-компиляция позволяет обнаружить некоторые ошибки во время этапа сборки, что помогает предотвратить возможные проблемы во время выполнения приложения.
  • Улучшенную безопасность: AOT-компиляция позволяет обнаружить потенциальные уязвимости в коде на этапе сборки, что помогает улучшить безопасность приложения.
  • AOT-компиляция в Angular может быть выполнена с помощью Angular CLI, добавив флаг --aot при выполнении команды сборки, например: ng build --aot .

3. Что такое динамические компоненты?

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

Для создания динамических компонентов в Angular используются методы createComponent() и ComponentFactoryResolver. Метод createComponent() позволяет создавать экземпляры компонентов, а ComponentFactoryResolver используется для получения фабрики компонента, которую можно использовать для создания экземпляров компонента.

Пример использования динамических компонентов в Angular:

import { Component, ComponentFactoryResolver, ViewChild, ViewContainerRef } from '@angular/core';

@Component({
  template: `<div><ng-container #dynamicContent></ng-container></div>`,
})
export class AppComponent {
  @ViewChild("dynamicContent", { read: ViewContainerRef })
  public dynamicContainer: ViewContainerRef;

  constructor(private componentFactoryResolver: ComponentFactoryResolver) {}

  createDynamicComponent() {
    // Получение фабрики компонента
    const componentFactory = this.componentFactoryResolver.resolveComponentFactory(DynamicComponent);

    // Создание экземпляра компонента
    const componentRef = this.dynamicContainer.createComponent(componentFactory);
  }
}

В приведенном примере AppComponent содержит ViewContainerRef, который представляет контейнер для динамически создаваемых компонентов. Метод createDynamicComponent() использует ComponentFactoryResolver для получения фабрики компонента DynamicComponent, а затем создает экземпляр компонента с помощью createComponent().

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

4. Что такое модули в Angular?

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

Модули в Angular предоставляют следующие преимущества:

Логическая организация: Модули позволяют разделить функциональность приложения на логические блоки, что делает код более понятным и поддерживаемым. Изоляция: Каждый модуль имеет свою собственную область видимости, что позволяет изолировать компоненты и сервисы от других частей приложения. Ленивая загрузка: Модули могут быть загружены только по требованию, что улучшает производительность приложения и уменьшает время загрузки. Переиспользование: Модули могут быть повторно использованы в разных приложениях или в разных частях одного приложения.

NgModule - это декоратор, который используется для определения модуля в Angular. Он применяется к классу модуля и принимает объект конфигурации, который определяет компоненты, сервисы и другие ресурсы, связанные с модулем.

Пример использования декоратора NgModule:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

В приведенном примере AppModule является корневым модулем приложения. Он импортирует BrowserModule, который предоставляет функциональность для работы с браузером, и объявляет AppComponent в качестве компонента, который будет использоваться в модуле.

5. Что такое сервисы в Angular?

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

Сервисы в Angular обычно используются для выполнения следующих задач:

Получение данных с сервера или других источников данных. Хранение и обработка данных, которые должны быть доступны в разных частях приложения. Реализация общей функциональности, такой как аутентификация, логирование и обработка ошибок. Взаимодействие с внешними библиотеками или сервисами. Сервисы в Angular могут быть созданы с помощью ключевого слова @Injectable и зарегистрированы в модуле приложения или компоненте с помощью массива providers. Это позволяет Angular создавать и предоставлять экземпляр сервиса внедрения зависимостей (DI) при создании компонента или другого класса.

Пример регистрации сервиса в модуле Angular:

import { NgModule } from '@angular/core';
import { MyService } from './my.service';

@NgModule({
  providers: [MyService]
})
export class AppModule { }

После регистрации сервиса в модуле, он может быть внедрен в компоненты или другие классы, используя DI. Например, в компоненте можно внедрить сервис следующим образом:

import { Component } from '@angular/core';
import { MyService } from './my.service';

@Component({
  selector: 'app-my-component',
  template: '...',
})
export class MyComponent {
  constructor(private myService: MyService) { }
}

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

6. Что такое жизненный цикл компонента в Angular?

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

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

  • ngOnChanges: Этот метод вызывается, когда значения входных свойств компонента изменяются. Он принимает объект SimpleChanges, который содержит информацию о предыдущих и текущих значениях входных свойств..
  • ngOnInit: Этот метод вызывается после того, как Angular инициализирует компонент и устанавливает входные свойства. Он используется для выполнения инициализационных действий, таких как получение данных с сервера или настройка компонента..
  • ngDoCheck: Этот метод вызывается при каждом изменении в компоненте, включая изменения входных свойств, события и обнаружение изменений, которые Angular не может обнаружить самостоятельно. Он позволяет разработчикам выполнять дополнительные проверки и действия при изменении компонента..
  • ngAfterContentInit: Этот метод вызывается после того, как Angular вставляет внешний контент в представление компонента. Он используется для выполнения действий, которые требуют доступа к внешнему контенту, например, инициализация дочерних компонентов..
  • ngAfterContentChecked: Этот метод вызывается после каждой проверки внешнего контента компонента. Он используется для выполнения действий, которые требуют доступа к внешнему контенту и проверки его изменений..
  • ngAfterViewInit: Этот метод вызывается после инициализации представления компонента и его дочерних компонентов. Он используется для выполнения действий, которые требуют доступа к представлению компонента, например, инициализация сторонних библиотек или установка обработчиков событий..
  • ngAfterViewChecked: Этот метод вызывается после каждой проверки представления компонента и его дочерних компонентов. Он используется для выполнения действий, которые требуют доступа к представлению компонента и проверки его изменений..
  • ngOnDestroy: Этот метод вызывается перед уничтожением компонента. Он используется для выполнения действий, таких как отписка от подписок, очистка ресурсов или отмена запущенных процессов..

Пример использования методов жизненного цикла компонента в Angular:

import { Component, OnInit, OnDestroy } from '@angular/core';

@Component({
  selector: 'app-my-component',
  template: `
    <h1>{{ title }}</h1>
  `
})
export class MyComponent implements OnInit, OnDestroy {
  title: string;

  ngOnInit() {
    this.title = 'Hello, Angular!';
    console.log('Component initialized');
  }

  ngOnDestroy() {
    console.log('Component destroyed');
  }
}

В приведенном выше примере компонент MyComponent реализует интерфейсы OnInit и OnDestroy, что позволяет использовать методы ngOnInit и ngOnDestroy. В методе ngOnInit устанавливается значение переменной title и выводится сообщение в консоль при инициализации компонента. В методе ngOnDestroy выводится сообщение в консоль перед уничтожением компонента.

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

8. Чем наблюдаемые отличаются от обещаний?

В Angular, наблюдаемые (observables) и обещания (promises) являются двумя разными концепциями для работы с асинхронными операциями. Вот некоторые основные различия между ними:

Наблюдаемые (observables):

  • Наблюдаемые представляют собой поток данных, который может иметь несколько значений, передаваемых по мере их поступления.
  • Они поддерживают операторы, такие как map, filter, reduce и другие, которые позволяют манипулировать данными в потоке.
  • Наблюдаемые могут быть отменены или отписаны с помощью метода unsubscribe.
  • Они широко используются в Angular для работы с асинхронными операциями, такими как HTTP-запросы или события пользовательского интерфейса.

Обещания (promises):

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

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

9. Что такое бутстрэппинг?

Бутстрэппинг в Angular - это процесс инициализации и запуска приложения Angular. Во время бутстрэппинга Angular создает корневой компонент приложения и связывает его с DOM-элементом на странице. Затем Angular загружает и компилирует компоненты, устанавливает связи между компонентами и их шаблонами, и запускает приложение.

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

Бутстрэппинг в Angular обычно выполняется в файле main.ts, где вызывается функция platformBrowserDynamic().bootstrapModule(AppModule), где AppModule - это модуль приложения, который содержит корневой компонент и другие компоненты, сервисы и зависимости.

Пример кода:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));

В этом примере AppModule - это модуль приложения, который содержит корневой компонент и другие компоненты, сервисы и зависимости. Функция platformBrowserDynamic().bootstrapModule(AppModule) запускает процесс бутстрэппинга, и Angular начинает загружать и компилировать компоненты, устанавливать связи и запускать приложение.

10. Что вы подразумеваете под внедрением зависимостей?

Angular - это платформа для разработки веб-приложений, которая позволяет создавать масштабируемые и эффективные приложения с использованием компонентной архитектуры. Внедрение зависимостей (Dependency Injection, DI) является одним из ключевых концепций в Angular.

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

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

Пример использования внедрения зависимостей в Angular:

import { Component, Injectable } from '@angular/core';

@Injectable()
export class DataService {
  getData(): string {
    return 'Some data';
  }
}

@Component({
  selector: 'app-example',
  template: `
    <h1>{{ data }}</h1>
  `,
})
export class ExampleComponent {
  constructor(private dataService: DataService) {}

  ngOnInit() {
    this.data = this.dataService.getData();
  }
}

В приведенном примере DataService является сервисом, который предоставляет данные. Компонент ExampleComponent требует эту зависимость и получает ее через конструктор. Angular автоматически создает экземпляр DataService и предоставляет его внутри ExampleComponent.

11. Описать аутентификацию и авторизацию Angular.

Аутентификация и авторизация являются важными аспектами разработки веб-приложений. В Angular есть несколько подходов к реализации аутентификации и авторизации, включая использование JSON Web Tokens (JWT) и HttpInterceptor.

Аутентификация с использованием JSON Web Tokens (JWT): JSON Web Tokens (JWT) - это открытый стандарт (RFC 7519), который определяет компактный и самодостаточный формат для представления информации об аутентификации в виде JSON-объекта. В Angular вы можете использовать JWT для аутентификации пользователей.

Для реализации аутентификации с использованием JWT в Angular, вам потребуется:

Создать серверную часть, которая будет генерировать и проверять JWT-токены. Реализовать механизм хранения токена на клиентской стороне (например, в localStorage или sessionStorage). Создать сервис аутентификации в Angular, который будет отправлять запросы на сервер для аутентификации и получения токена, а также сохранять и проверять токен на клиентской стороне. Авторизация с использованием HttpInterceptor: HttpInterceptor - это механизм в Angular, который позволяет перехватывать и изменять HTTP-запросы и ответы. Вы можете использовать HttpInterceptor для авторизации запросов, добавляя заголовки авторизации или проверяя токены доступа.

Для реализации авторизации с использованием HttpInterceptor в Angular, вам потребуется:

  • Создать класс, реализующий интерфейс HttpInterceptor.
  • В классе HttpInterceptor реализовать методы для перехвата и изменения HTTP-запросов и ответов.
  • Зарегистрировать HttpInterceptor в провайдере приложения, чтобы он был доступен для использования во всем приложении.

Примеры кода:

  • Аутентификация с использованием JWT:
// Сервис аутентификации
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AuthService {
  constructor(private http: HttpClient) {}

  login(username: string, password: string) {
    return this.http.post('/api/auth/login', { username, password });
  }
}

// Компонент для входа пользователя
import { Component } from '@angular/core';
import { AuthService } from './auth.service';

@Component({
  selector: 'app-login',
  template: `
    <form (ngSubmit)="login()">
      <input type="text" [(ngModel)]="username" name="username" placeholder="Username">
      <input type="password" [(ngModel)]="password" name="password" placeholder="Password">
      <button type="submit">Login</button>
    </form>
  `,
})
export class LoginComponent {
  username: string;
  password: string;

  constructor(private authService: AuthService) {}

  login() {
    this.authService.login(this.username, this.password).subscribe(
      (response) => {
        // Сохранение токена на клиентской стороне
        localStorage.setItem('token', response.token);
      },
      (error) => {
        console.error('Ошибка аутентификации:', error);
      }
    );
  }
}
  • Авторизация с использованием HttpInterceptor:
// HttpInterceptor
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // Получение токена из localStorage
    const token = localStorage.getItem('token');

    // Добавление заголовка авторизации
    if (token) {
      request = request.clone({
        setHeaders: {
          Authorization: `Bearer ${token}`
        }
      });
    }

    return next.handle(request);
  }
}

// Регистрация HttpInterceptor в провайдере приложения
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { AuthInterceptor } from './auth.interceptor';

@NgModule({
  imports: [HttpClientModule],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: AuthInterceptor,
      multi: true
    }
  ]
})
export class CoreModule {}

Обратите внимание: Это только примеры кода для демонстрации основных концепций аутентификации и авторизации в Angular. Реальная реализация может варьироваться в зависимости от требований вашего приложения.

12. Что такое процесс цикла дайджеста в Angular?

В Angular процесс цикла дайджеста (digest cycle) является ключевым механизмом для обновления данных и обновления представления. Во время цикла дайджеста Angular проверяет все связанные скоупы (scopes) и выполняет проверку изменений в данных. Если происходят изменения, Angular обновляет представление, чтобы отразить эти изменения.

Процесс цикла дайджеста в Angular состоит из следующих шагов:

  • Запуск цикла дайджеста: Цикл дайджеста запускается в ответ на событие, такое как пользовательское действие или изменение данных.
  • Проверка изменений: Angular проверяет все скоупы (scopes) и их модели данных на наличие изменений. Он сравнивает текущие значения с предыдущими значениями и определяет, какие из них изменились.
  • Применение изменений: Если Angular обнаруживает изменения в данных, он обновляет представление, чтобы отразить эти изменения. Это может включать обновление текста, добавление или удаление элементов DOM и другие изменения в пользовательском интерфейсе.
  • Проверка изменений вложенных скоупов: Angular также проверяет изменения во всех вложенных скоупах и их моделях данных.
  • Повторение цикла дайджеста: Цикл дайджеста повторяется до тех пор, пока не будет достигнуто состояние стабильности, то есть пока не будет обнаружено никаких изменений в данных или представлении.

Цикл дайджеста в Angular позволяет обеспечить синхронизацию данных и представления, что делает фреймворк мощным инструментом для разработки динамических веб-приложений.

13. Что такое Angular Router?

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

Angular Router предоставляет механизм для определения маршрутов и их связывания с компонентами приложения. Он позволяет определить, какой компонент должен быть отображен при переходе по определенному URL-адресу или при выполнении определенного действия пользователем.

Чтобы использовать Angular Router, необходимо импортировать соответствующие модули и классы. Например, для определения маршрутов и настройки маршрутизации в Angular, вы можете использовать классы Routes и RouterModule из модуля @angular/router.

Пример использования Angular Router для определения маршрутов выглядит следующим образом:

import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: 'contact', component: ContactComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

В этом примере мы определяем три маршрута: 'home', 'about' и 'contact', и связываем каждый маршрут с соответствующим компонентом.

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

14. Что такое REST?

REST API в Angular - это способ взаимодействия с сервером, используя протокол HTTP и стандартные методы запросов, такие как GET, POST, PUT и DELETE. В Angular, для работы с REST API, можно использовать сервис HttpClient, который предоставляет удобные методы для отправки HTTP-запросов и получения ответов от сервера.

REST API в Angular позволяет вам обмениваться данными с сервером и выполнять различные операции, такие как получение, создание, обновление и удаление данных. Он является важной частью разработки веб-приложений на Angular и позволяет создавать мощные и интерактивные приложения.

Обратите внимание, что RESTful API не является частью Angular-приложения. RESTful API - это веб-сервис, написанный на серверной стороне, который может использоваться Angular-приложением для взаимодействия с сервером

Для работы с REST API в Angular можно использовать модуль HttpClient, который предоставляет удобные методы для отправки HTTP-запросов и получения ответов. Вот некоторые основные шаги для работы с REST API в Angular:

  • Импортируйте модуль HttpClientModule в вашем Angular-приложении.
import { HttpClientModule } from '@angular/common/http';
Добавьте HttpClientModule в раздел imports в файле AppModule.

@NgModule({
  imports: [
    HttpClientModule
  ],
  // ...
})
export class AppModule { }
  • В вашем компоненте или сервисе импортируйте HttpClient и используйте его для отправки HTTP-запросов.
import { HttpClient } from '@angular/common/http';

constructor(private http: HttpClient) { }

// Пример GET-запроса
getData() {
  return this.http.get('https://api.example.com/data');
}

// Пример POST-запроса
postData(data: any) {
  return this.http.post('https://api.example.com/data', data);
}
  • Вызовите методы getData() или postData() для отправки запросов и получения данных.
this.getData().subscribe((response) => {
  console.log(response);
}, (error) => {
  console.error(error);
});

Примечание: Важно помнить, что HTTP-запросы асинхронны, поэтому для получения данных необходимо использовать методы подписки, такие как subscribe().

Это основные шаги для работы с REST API в Angular. Вы также можете использовать другие методы, такие как PUT и DELETE, для взаимодействия с API.

15. Объясните Angular CLI.

Angular CLI (Command Line Interface) - это инструмент командной строки, который предоставляет разработчикам возможность создавать, развивать и поддерживать проекты на Angular. Он предоставляет набор команд, которые упрощают различные задачи, связанные с разработкой Angular-приложений.

Основные возможности Angular CLI:

  • Создание нового проекта: Angular CLI позволяет создавать новые проекты с помощью команды ng new. Он автоматически настраивает структуру проекта, устанавливает зависимости и создает основные файлы и папки, необходимые для разработки Angular-приложения.
  • Генерация компонентов, сервисов и других элементов: Angular CLI предоставляет команды для генерации различных элементов приложения, таких как компоненты, сервисы, директивы и многое другое. Например, команда ng generate component my-component создаст новый компонент с именем "my-component" и соответствующими файлами и кодом.
  • Запуск локального сервера разработки: Angular CLI позволяет запускать локальный сервер разработки с помощью команды ng serve. Это позволяет разработчикам видеть изменения в реальном времени при разработке приложения и автоматически перезагружать страницу при внесении изменений в код.
  • Сборка и оптимизация проекта: Angular CLI предоставляет команды для сборки и оптимизации проекта перед его развертыванием. Например, команда ng build собирает проект в определенную директорию, готовую для развертывания на сервере.
  • Тестирование приложения: Angular CLI предоставляет инструменты для запуска и выполнения тестов в Angular-приложении. Это позволяет разработчикам автоматизировать тестирование и обнаруживать потенциальные проблемы и ошибки в приложении.
  • Интеграция с другими инструментами: Angular CLI интегрируется с другими инструментами разработки, такими как Angular DevTools, которые предоставляют дополнительные возможности для отладки и анализа Angular-приложений.

Пример использования Angular CLI:

// my-component.component.ts
@Component({ /* .. */ })
export class MyComponent {
  constructor(private rest: RestService) {}

  // Примеры работы с Observable
  public getFields() {
    this.rest.getByObservable('http://anyurl.com').subscribe(value => {
      // Обработка значения
    }, error => {
      // Обработка ошибки
    });
  }

  // Примеры работы с Promise
  public async getAsyncField() {
    try {
      const value = await this.rest.getByPromise('http://anyurl.com');
      // Обработка значения
    } catch (error) {
      // Обработка ошибки
    }
  }
}

Вот некоторые команды Angular CLI, которые могут быть полезны при разработке Angular-приложений:

  • ng new <project-name>: создает новый проект Angular.
  • ng generate component <component-name>: генерирует новый компонент.
  • ng serve: запускает локальный сервер разработки.
  • ng build: собирает проект для развертывания.
  • ng test: запускает тесты в приложении.

16. Что такое схема?

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

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

Например, с помощью схематиков можно создать новый компонент в проекте Angular CLI с помощью команды ng generate component. Это приведет к созданию соответствующих файлов компонента, включая шаблон, стили и код компонента.

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

Примеры схематиков Angular:

  • app-shell: генерирует оболочку приложения для запуска серверной версии приложения.
  • component: создает новый компонент.
  • directive: создает новую директиву.
  • module: создает новый модуль NgModule.

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

17. Что такое HttpClient и каковы его преимущества?

HttpClient - это модуль в Angular, который предоставляет возможность выполнять HTTP-запросы к серверу. Он является частью пакета @angular/common/http и предоставляет удобный интерфейс для работы с HTTP-протоколом.

Преимущества HttpClient в Angular включают:

  • Удобство использования: HttpClient предоставляет простой и интуитивно понятный API для выполнения HTTP-запросов. Он предоставляет методы для отправки GET, POST, PUT, DELETE и других типов запросов.
  • Обработка ошибок: HttpClient предоставляет механизмы для обработки ошибок при выполнении HTTP-запросов. Он автоматически обрабатывает ошибки сети, такие как отсутствие соединения или недоступность сервера, и предоставляет возможность обрабатывать ошибки, возвращаемые сервером.
  • Поддержка интерсепторов: HttpClient поддерживает использование интерсепторов, которые позволяют изменять и расширять запросы и ответы. Интерсепторы могут использоваться для добавления заголовков, обработки аутентификации, кэширования и других задач.
  • Поддержка асинхронности: HttpClient предоставляет возможность выполнения асинхронных HTTP-запросов. Он возвращает объект Observable, который позволяет подписываться на результаты запроса и получать их асинхронно.
  • Поддержка типизации: HttpClient поддерживает типизацию данных, возвращаемых сервером. Он позволяет указывать ожидаемый тип данных и автоматически преобразовывать ответ сервера в указанный тип.

18. Что такое многоадресная рассылка в Angular?

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

Пример использования многоадресной рассылки в Angular:

import { Observable } from 'rxjs';

// Создание Observable
const observable = new Observable((observer) => {
  // Генерация данных
  observer.next('Первое сообщение');
  observer.next('Второе сообщение');
  observer.next('Третье сообщение');
});

// Подписка на Observable
observable.subscribe((data) => {
  console.log(data);
});

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

19. Что такое директива в Angular?

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

Директивы в Angular могут быть двух типов: структурные и атрибутные.

Структурные директивы изменяют структуру DOM-дерева, добавляя или удаляя элементы из разметки. Примеры структурных директив в Angular: ngIf, ngFor, ngSwitch.

Атрибутные директивы изменяют внешний вид или поведение элемента, к которому они применяются. Примеры атрибутных директив в Angular: ngStyle, ngClass, ngModel.

Директивы в Angular объявляются с помощью декоратора @Directive и могут содержать различные хуки жизненного цикла, которые позволяют выполнять определенные действия при создании, изменении или удалении директивы.

Например, вот пример директивы в Angular:

import { Directive, ElementRef } from '@angular/core';

@Directive({
  selector: '[myDirective]'
})
export class MyDirective {
  constructor(private elementRef: ElementRef) {
    // Используем ElementRef для доступа к элементу, к которому применяется директива
    this.elementRef.nativeElement.style.backgroundColor = 'red';
  }
}

В этом примере директива MyDirective применяется к элементу с атрибутом myDirective и устанавливает красный фон для этого элемента.

23. Как обмениваться данными между компонентами в Angular?

24. Что такое складывание?

25. Что такое NoopZone?

26. Что такое макросы?

27. Какова цель общего модуля в Angular?

28. Какие типы компиляторов используются в Angular?

29. Какова поддержка Angular Elements в браузере?

30. Какова роль SPA в Angular?

31. Что произойдет, если вы не предоставите обработчик для наблюдателя?

32. Что вы подразумеваете под интерполяцией строк?

33. Что вы подразумеваете под привязкой данных?

34. Что такое проекция контента?

35. Что такое шаблонные выражения?

35. Что такое двусторонняя привязка данных в Angular?

36. Что такое декораторы и их типы в Angular?

43. Что такое обнаружение изменений и как работает механизм обнаружения изменений?

44. Что происходит, когда вы используете тег скрипта в шаблоне?

45. Когда использовать директиву?

46. Что такое интерполяция?

47. В чем разница между чистой и нечистой трубой?

48. Что такое наблюдаемые?

49. Что такое пользовательские элементы?

50. Каковы различные виды директив?

51. Всегда ли нам нужен модуль маршрутизации?

52. Что такое (JIT)?

53. Какова цель файлов метаданных JSON?

54. Как вы описываете различные зависимости в приложениях Angular?

55. Что такое декораторы классов в Angular?

56. Что произойдет, если я импортирую один и тот же модуль дважды?

57. Каковы способы запуска обнаружения изменений в Angular?

58. Каковы принципы безопасности в angular?

59. Каковы принципы безопасности в angular?

60. Что такое интерфейс командной строки Schematics?

70. В чем разница между ViewEncapsulation и Shadow DOM в Angular?

71. Что такое защита маршрута в Angular?

72. Что такое угловой материал?

73. Какова цель декоратора NgModule в Angular?

74. Что такое внедрение зависимостей в Angular?

75. В чем разница между HttpClient и Http в Angular?

76. В чем разница между HttpClient и Http в Angular?

77. Какова цель элемента ng-container в Angular?

78. Что такое угловая защита?

79. В чем разница между асинхронным каналом и методом подписки в Angular?

80. Как вы обмениваетесь данными между компонентами в Angular?

81. Что такое преобразователь в Angular?

82. Что такое провайдер в Angular?

83. В чем разница между сервисом и компонентом в Angular?

84. В чем разница между ElementRef и Renderer2 в Angular?

85. В чем разница между формой, управляемой шаблоном, и реактивной формой в Angular?

86. Что такое сервисный работник Angular?

87. В чем разница между шаблоном и представлением в Angular?

88. Что такое механизм обнаружения изменений Angular?

89. В чем разница между сервисом и компонентом в Angular?

90. Что такое ссылочная переменная шаблона Angular?

91. Что такое декоратор ViewChild в Angular?

92. В чем разница между формой, управляемой шаблоном, и реактивной формой в Angular?

93. Что такое модуль Angular?

94. Что такое NgZone в Angular?

95. В чем разница между ngOnInit и ngAfterViewInit в Angular?

96. Какова цель декоратора HostListener в Angular?

97. Какова цель директивы ng-template в Angular?

98. Какова цель службы ActivatedRoute в Angular?

99. Какова цель синтаксиса async/await в Angular?

100. Какова цель директивы ngClass в Angular?