Директивы — в Angular это некоторые вспомогательные методы, которые можно использовать внутри шаблона. Можно создавать свои директивы.
Директивы стиля
Это директивы, которые позволяют нам менять стили элементов и компонентов.
ngStyle
директива позволяет динамически изменять стиль элемента
<div class="card">
<h2 [ngStyle]="{
color: title.length < 5 ? 'black' : 'green'
}">{{ title }}</h2>
</div>
ngClass
Позволяет управлять классом элемента динамически
<div class="text" [ngClass]="{
blue: textColor === 'blue',
red: textColor === 'red'
}"></div>
<!-- или -->
<div class="text"
[class.blue]="textColor === 'blue'"
[class.red]="textColor === 'red'"
></div>
Структурные директивы
Это директивы, которые позволяют менять содержание html. Символ *
означает, что директива меняет html.
ngIf
Добавлять или не добавлять компоненты в html.
<div *ngIf="toggle">
<app-card></app-card>
<app-card></app-card>
<app-card></app-card>
<app-card></app-card>
</div>
директива Else для ngIf:
<div *ngIf="toggle; else noCards">
<app-card></app-card>
<app-card></app-card>
<app-card></app-card>
<app-card></app-card>
</div>
<ng-template #noCards>
<p>Cards are hidden</p>
</ng-template>
ngFor
Эта директива позволяет работать с коллекцией элементов. Пример ее использования:
<div class="container">
<!-- Example 1 -->
<app-card
*ngFor="let iterCard of cards"
[card]="iterCard"
></app-card>
<!-- Example 2 -->
<h2>Products:</h2>
<div *ngFor="let product of products">
<h3>
{{ product.name }}
</h3>
</div>
</div>
через атрибут [card]
мы связываем объект iterCard
с компонентом CardComponent
(см далее)
В коде компонента формы (является родительской для компонента карты):
export interface Card {
title: string
}
@Component({
selector: 'app-form',
...
})
export class FormComponent {
cards: Card[] = [
{title: 'Card 1'},
{title: 'Card 2'}
]
}
В компоненте карты добавляем доступ до полей объекта card из родительского компонента FormComponent:
import { Component, Input } from '@angular/core';
import { Card } From '../app.component';
@Component({
selector: 'app-card',
...
})
export class CardComponent {
@Input() card: Card
@Input() index1: number
}
Получени индексов из цикла ngFor
(index
— это системное название):
<div class="container">
<app-card
*ngFor="let iterCard of cards; let idx = index"
[card]="iterCard"
[index]="idx + 1"
></app-card>
</div>