ng generate component home
===сокращенная запись===
ng g c home
===создание компонента без тестов===
ng generate component --spec=false
====примера создания компонента Angula====
Начнем сразу с примера создания компонента Angular.\\
home.component.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}
Для использования созданного компонента в приложении сначала его необходимо указать в модуле, в пределах которого он определен, в свойстве declarations.
\\
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Инициализация компонента осуществляется через использование значения свойства selector в качестве элемента в нужном месте шаблона.\\
app.component.html
Свойства класса компонента могут использоваться для отображения данных в шаблоне. Для этого используется механизм интерполяции. А вызов методов может осуществляться при возникновении событий.
====Конфигурация компонента====
Параметры компонента задаются с помощью передаваемого декоратору конфигурационного объекта следующей структуры:
* **selector** - уникальный для каждого компонента CSS-селектор, с помощью которого компонент инициализируется в шаблоне;
* **template** - визуальная часть компонента, представленная HTML-разметкой в виде строки;
* **templateUrl** - URL-адрес файла, содержащего HTML-разметку;
* **styles** - стили, распространяемые только на HTML текущего компонента;
* **styleUrls** - массив URL-адресов файлов стилей;
* **inputs** - определяет массив входных свойств;
* **outputs** - задает массив выходных свойств;
* **animations** - описывает анимации компонента;
* **encapsulation** - определяет с помощью перечисления ViewEncapsulation пределы распространения стилей;
* **changeDetection** - устаналивает режим работы механизма отслеживания изменений;
* **providers** - задает массив локальных в пределах компонента Angular Providers;
* **viewProviders** - определяет Angular Providers, которые доступны не только текущему компоненту, но и всем его дочерним представлениям;
* **interpolation** - переопределяет открывающий и закрывающие символы интерполяции;
* **preserveWhitespaces** - логическое значение, если true - сохраняет в шаблоне все лишние символы пробела, в противном случае удаляет их (по умолчанию false).;
@Component({
...
interpolation: ['!!', '!!']
})
====selector====
//вызов компонента с помощью тега//
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-car',
template: `
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus, nesciunt.
`
})
\\
//вызов с помощью аттрибута//
import { Component, OnInit } from '@angular/core';
@Component({
selector: '[app-car]',
template: `
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus, nesciunt.
`
})
\\
//вызов в классе//
import { Component, OnInit } from '@angular/core';
@Component({
selector: '.app-car',
template: `
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus, nesciunt.
`
})
====template====
С помощью свойства template. Шаблон представляет кусок разметки HTML с вкраплениями кода Angular. Фактически шаблон это и есть представление, которое увидит пользователь при работе с приложением.
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-car',
template: `
Single Car
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus, nesciunt.
`,
})
export class CarComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
====templateUrl====
Каждый компонент должен иметь один шаблон. Однако необязательно определять шаблон напрямую с помощью свойства template. Можно вынести шаблон во внешний файл с разметкой html, а для его подключения использовать свойство templateUrl.
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-car',
templateUrl: './car.component.html',
})
export class CarComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
====styles====
Стилизация компонента может производиться как с помощью установки стилей в самом компоненте, так и с помощью подключения внешних css-файлов.
Для установки стилей в директиве @Component определено свойство styles:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-car',
template: `
Single Car
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus, nesciunt.
`,
// styleUrls: ['./car.component.css']
styles: [`
h2 {
color: aqua;
}
`]
})
export class CarComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
====Инкапсуляция стилей====
Под инкапсуляцией стилей компонента понимается определение пределов распространения его стилей на другие шаблоны.\\
\\
Правило инкапсуляции задается с помощью перечисления ``ViewEncapsulation``, который входит в состав модуля \\
\\
''@angular/core'' и имеет следующие значения:
* **ViewEncapsulation.Emulated** - используется по умолчанию и указывает, что стили действуют только в пределах текущего компонента;
* **ViewEncapsulation.None** - объявленные для компонента стили распространяются на все приложение без ограничений;
* **ViewEncapsulation.ShadowDom** - создает для компонента элемент ShadowRoot и инкапсулирует стили в нем.
Пример использования ''ViewEncapsulation''.
import {ViewEncapsulation} from '@angular/core';
@Component({
...
encapsulation: ViewEncapsulation.None
})
====Геттеры и сеттеры====
Геттерами и сеттерами называются методы Angular компонента, которые используются для модификации значений его свойств.\\
\\
//Getter// вызывается в момент обращения к свойству (в шаблоне или в других методах классах), setter - в момент присвоения ему значения, обычно это свойства с декоратором ''@Input()''.
@Input() _name: string = null;
get name(): string { return this._name || 'Unknown'; }
Запись означает, что при обращении к свойству с именем name будет вызван одноименный метод с ключевым словом get.\\
\\
Setter создается с помощью set. Он не должен возвращать значений и обязательно принимает в качестве единственного аргумента исходное значение.
@Component({
selector: 'contacts-list',
template: ` `
})
export class ContactsListComponent {
contactPerson: string;
}
@Component({
selector: 'contacts-item',
template: `{{name}}
`
})
export class ContactsItemComponent {
_name: string = null;
@Input() set name(value: string) { this._name = value + '*'; }
get name(): string { return this._name || 'Unknown'; }
}
В компоненте ''ContactsItemComponent'' определено строковое свойство ''_name'', которое участвует в формировании name.
Свойства, определенные в Angular компоненте с помощью сеттеров и геттеров, не должны дублироваться в "обычных" свойствах, поэтому в примере выше используется название с нижним подчеркиванием.
В ''ContactsListComponent'' задается значение name компонента ''ContactsItemComponent''. Именно в этот момент вызывается метод ''set()'' и устанавливает значение в "Peter*".\\
\\
В самом компоненте после интерполяции вызывается метод ''get()'', который возвращает "Unknown", если _name равно null.\\
\\
То есть если бы в ContactsListComponent шаблон был , то значением name было бы "Unknown".