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

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

Узнайте о них прямо сейчас!

1. Title

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

Приложения Angular получают заголовок для окна браузера из тегов title>…/title> в файле index.html. Этот заголовок в Angular не меняется при межкомпонентном переходе.

А знаете ли вы, что с помощью компонентов можно переопределить заголовок браузера?

В @angular/platform-browser есть сервис Title. Для изменения заголовка нужно просто передать сервис Title компоненту и использовать метод setTitle.

import { Title } from “@angular/platform-browser”@Component({ 

})
export class LoginComponent implements OnInit {
constructor(private title: Title) {} ngOnInit() {
title.setTitle(“Login”)
}
}

При переходе к LoginComponent заголовок окна браузера изменится на “Login”.

То же самое можно сделать в любом компоненте проекта. Тогда по мере навигации внутри приложения заголовок будет меняться в окне браузера.

2. Meta

Большая часть того, что показывает приложение Angular, содержится в файле index.html. Приложение будет иметь метатеги, установленные в файле index.html. В @angular/platform-browser в Angular есть сервис Meta, который позволяет задавать метатеги из компонентов. Применять метатеги полезно для SEO и продвижения страниц в соцсетях.

Элементы Meta предоставляют поисковым системам информацию о веб-странице, которая помогает поместить ее в нужную категорию при ранжировании.

Meta легко использовать: просто импортируйте его из @angular/platform-browser и внедрите в компонент.

import { Meta } from “@angular/platform-browser”@Component({ 

})
export class BlogComponent implements OnInit {
constructor(private meta: Meta) {} ngOnInit() {
meta.updateTag({name: “title”, content: “”})
meta.updateTag({name: “description”, content: “Lorem ipsum dolor”})
meta.updateTag({name: “image”, content: “./assets/blog-image.jpg”})
meta.updateTag({name: “site”, content: “My Site”})
}
}

Благодаря Meta, BlogComponent может отображаться в Twitter и прочих соцсетях с правильно выведенными заголовками, изображениями и описанием.

3. Переопределение интерполяции шаблонов

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

У нас есть начало и конец. Если поместить свойство между ними, оно отобразится в DOM браузера.

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

@Component({ 
 interpolation: [“((“,”))”] 
}) 
export class AppComponent {}

В шаблоне AppComponent “” больше не будет использоваться в качестве интерполяции. Вместо этого будет “(())”.

@Component({ 
 template: ` 
 <div> 
 ((data)) 
 </div> 
 `, 
 interpolation: [“((“,”))”] 
 }) 
 export class AppComponent { 
 data: any = “dataVar” 
 }

При рендеринге страницы будет отображаться “dataVar” вместо “((data)).

4. Location

Используя сервис Location, можно получить URL страницы, открытой в браузере. В зависимости от выбора LocationStrategy, Location будет сохраняться либо по пути в URL, либо по части URL после решетки (#).

С помощью Location можно перейти к URL, продвинуться вперед и вернуться назад по истории платформы, изменить URL браузера и заменить верхний элемент в истории платформы.

Сервис Location используется путем внедрения его из модуля CommonModule.

import { Location } from “@angular/common”@Component({ 

})
export class AppComponent {
constructor(private location: Location) {} navigateTo(url) {
this.location.go(url)
} goBack() {
location.back()
} goForward() {
location.forward()
}
}

5. DOCUMENT

Иногда нужно получить модель документа, чтобы прямо в приложении Angular выполнять операции с DOM.

Именно это и позволяет сделать DOCUMENT  —  DI Token (токен внедрения зависимостей), представляющий основной контекст рендеринга. Это то, чем является DOM-документ браузера. Он обеспечивает операции DOM в любой среде выполнения.

Примечание: если Application Context и Rendering Context отличаются, DOCUMENT может быть недоступен в Application Context (например, при запуске приложения в веб-воркере).

Допустим, в HTML имеется такой элемент:

<canvas id=”canvas”></canvas>

Чтобы получить HTML-элемент canvas, внедрите DOCUMENT:

@Component({}) 
export class CanvasElement { 
 constructor(@Inject(DOCUMENT) _doc: Document) {} 
}

HTML-элемент canvas можно получить, вызвав getElementById().

@Component({}) 

export class CanvasElement {

constructor(@Inject(DOCUMENT) _doc: Document) {} renderCanvas() {

this._doc.getElementById(“canvas”)

}

}

Это можно сделать безопасно, используя ElementRef и ссылку на шаблон.

Предостережение: будьте осторожны при использовании DOCUMENT! Прямое взаимодействие с DOM повышает риск XSS-атак.

6. Декоратор Attribute

Чаще всего в приложении Angular используются декораторы Component, Module и Directive.

Декоратор Attribute позволяет передавать статическую строку без замедления работы, избегая проверки изменений.

Значения декоратора Attribute проверяются только один раз. Способ использования такой же, как и в случае @Input:

@Component({ 

})
export class BlogComponent {
constructor(@Attribute(“type”) private type: string ) {}
}

7. HttpInterceptor

Это очень мощная часть Angular. HttpInterceptor идентифицирует запросы HttpRequest, перехватывает и обрабатывает их.

Вызывая next.handle(transformedReq), большинство перехватчиков изменяют исходящий запрос перед отправкой его следующему перехватчику в цепочке.

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

HttpInterceptor может использоваться для:

  • аутентификации;
  • кэширования;
  • поддельного бэкенда;
  • трансформации URL;
  • изменения заголовков.

Эту функцию легко использовать. Сначала создайте сервис и реализуйте интерфейс HttpInterceptor.

@Injectable() 
export class MockBackendInterceptor implements HttpInterceptor {
constructor() {} intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

}
}

После добавьте его в модуль main:

@NgModule({ 
…providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MockBackendInterceptor,
multi: true
}
]

})
export class AppModule {}

8. AppInitializer

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

APP INITIALIZER  —  это функция, которая запускается при первом запуске Angular-приложения.

Она проста в использовании. Допустим, вы хотите, чтобы при запуске приложения Angular выполнялась некая функция runSettings:

function runSettingsOnInit() { 

}

Добавьте ее в раздел провайдеров декоратора NgModule, перейдя к основному модулю AppModule:

@NgModule({ 
providers: [
{ provide: APP_INITIALIZER, useFactory: runSettingsOnInit }
]
})

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Sefali Warner: Most Useful Angular Features You’ve Probably Never Used

Предыдущая статья4 частые ошибки в рефакторинге
Следующая статьяПочему стоит избегать метода push при разработке на JavaScript