Структурні Директиви в Angular
Під час створення користувацьких інтерфейсів для веб-додатків часто виникають ситуації на кшталт: «Відобразити список елементів, якщо він доступний, або показати заповнювач, якщо він порожній.» У Angular такі завдання вирішуються за допомогою структурних директив — потужних інструментів, які керують тим, що саме і коли буде відображено у шаблоні.
На відміну від звичайних HTML-атрибутів, структурні директиви не просто змінюють поведінку елемента — вони фактично змінюють структуру DOM, додаючи або видаляючи цілі елементи.
Структурна директива NgFor
Припустимо, у вас є список завдань у компоненті TaskListComponent
. Кожне завдання має відображатися зі своїми елементами інтерфейсу: кнопкою видалення, перемикачем статусу тощо. Прописувати кожне завдання вручну в HTML було б неефективно та складно для підтримки при зміні даних.
tasks = [
{ id: 1, title: 'Buy groceries', completed: false },
{ id: 2, title: 'Walk the dog', completed: true },
{ id: 3, title: 'Learn Angular', completed: false }
];
Angular надає директиву *ngFor
, яка дозволяє перебирати масив і автоматично створювати HTML-елемент для кожного елемента масиву.
<task-component *ngFor="let task of tasks"></task-component>
Тут *ngFor="let task of tasks"
повідомляє Angular: "Для кожного завдання в масиві tasks створити один <task-component>
".
Якщо масив містить 3 завдання, Angular відобразить 3 окремі екземпляри task-component
, кожен з власними даними. Це робить інтерфейс більш масштабованим і усуває дублювання коду.
Додаткові можливості ngFor
Окрім базової ітерації, *ngFor
підтримує кілька корисних контекстних змінних, до яких можна отримати доступ безпосередньо в директиві за допомогою let
.
Ось короткий довідник:
Ось приклад використання деяких із них:
<task-component
*ngFor="let task of tasks; let i = index; let odd = odd"
[task]="task"
[class.odd]="odd">
</task-component>
У цьому прикладі змінна odd
використовується для застосування CSS-класу до кожного другого рядка, що робить список візуально зручнішим для перегляду.
Структурна директива NgIf
Розглянемо, як працює умовне відображення на прикладі простого списку завдань. Ви хочете відображати список, якщо в ньому є завдання, а якщо він порожній — показувати повідомлення на кшталт "Завдань ще немає".
В Angular для умовного відображення або приховування елементів використовується директива *ngIf
. Хоча вона виглядає як звичайний HTML-атрибут, насправді виконує набагато більше дій у фоновому режимі.
<div *ngIf="tasks.length > 0">Task List</div>
Коли Angular обробляє *ngIf
, він переписує шаблон у фоновому режимі. Замість безпосереднього рендерингу елемента, він обгортає його у <ng-template>
і додає до DOM лише тоді, коли умова дорівнює true
.
<ng-template [ngIf]="tasks.length > 0">
<div>Task List</div>
</ng-template>
Якщо умова оцінюється як false
(тобто, tasks.length === 0
), Angular взагалі не відображає елемент — він повністю відсутній у DOM.
Але що робити, якщо потрібно показати резервне повідомлення замість простого приховування контенту? У цьому випадку стане у пригоді блок else
директиви *ngIf
. Він дозволяє посилатися на альтернативний шаблон за допомогою <ng-template>
з власною міткою.
task-list.ts
task-list.css
Відбувається наступне:
-
Angular спочатку перевіряє, чи містить масив
tasks
елементи; -
Якщо так, відображається
<div>
із компонентами завдань; -
Якщо масив порожній, використовується шаблон
#noTasks
і виводиться повідомлення: "No tasks yet 😊".
Це робить ваші шаблони значно чистішими та допомагає зручно керувати порожніми станами.
1. Що робить директива *ngIf
?
2. Яке призначення *ngFor
в Angular?
3. Що відбувається, якщо *ngIf="false"
?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.13
Структурні Директиви в Angular
Свайпніть щоб показати меню
Під час створення користувацьких інтерфейсів для веб-додатків часто виникають ситуації на кшталт: «Відобразити список елементів, якщо він доступний, або показати заповнювач, якщо він порожній.» У Angular такі завдання вирішуються за допомогою структурних директив — потужних інструментів, які керують тим, що саме і коли буде відображено у шаблоні.
На відміну від звичайних HTML-атрибутів, структурні директиви не просто змінюють поведінку елемента — вони фактично змінюють структуру DOM, додаючи або видаляючи цілі елементи.
Структурна директива NgFor
Припустимо, у вас є список завдань у компоненті TaskListComponent
. Кожне завдання має відображатися зі своїми елементами інтерфейсу: кнопкою видалення, перемикачем статусу тощо. Прописувати кожне завдання вручну в HTML було б неефективно та складно для підтримки при зміні даних.
tasks = [
{ id: 1, title: 'Buy groceries', completed: false },
{ id: 2, title: 'Walk the dog', completed: true },
{ id: 3, title: 'Learn Angular', completed: false }
];
Angular надає директиву *ngFor
, яка дозволяє перебирати масив і автоматично створювати HTML-елемент для кожного елемента масиву.
<task-component *ngFor="let task of tasks"></task-component>
Тут *ngFor="let task of tasks"
повідомляє Angular: "Для кожного завдання в масиві tasks створити один <task-component>
".
Якщо масив містить 3 завдання, Angular відобразить 3 окремі екземпляри task-component
, кожен з власними даними. Це робить інтерфейс більш масштабованим і усуває дублювання коду.
Додаткові можливості ngFor
Окрім базової ітерації, *ngFor
підтримує кілька корисних контекстних змінних, до яких можна отримати доступ безпосередньо в директиві за допомогою let
.
Ось короткий довідник:
Ось приклад використання деяких із них:
<task-component
*ngFor="let task of tasks; let i = index; let odd = odd"
[task]="task"
[class.odd]="odd">
</task-component>
У цьому прикладі змінна odd
використовується для застосування CSS-класу до кожного другого рядка, що робить список візуально зручнішим для перегляду.
Структурна директива NgIf
Розглянемо, як працює умовне відображення на прикладі простого списку завдань. Ви хочете відображати список, якщо в ньому є завдання, а якщо він порожній — показувати повідомлення на кшталт "Завдань ще немає".
В Angular для умовного відображення або приховування елементів використовується директива *ngIf
. Хоча вона виглядає як звичайний HTML-атрибут, насправді виконує набагато більше дій у фоновому режимі.
<div *ngIf="tasks.length > 0">Task List</div>
Коли Angular обробляє *ngIf
, він переписує шаблон у фоновому режимі. Замість безпосереднього рендерингу елемента, він обгортає його у <ng-template>
і додає до DOM лише тоді, коли умова дорівнює true
.
<ng-template [ngIf]="tasks.length > 0">
<div>Task List</div>
</ng-template>
Якщо умова оцінюється як false
(тобто, tasks.length === 0
), Angular взагалі не відображає елемент — він повністю відсутній у DOM.
Але що робити, якщо потрібно показати резервне повідомлення замість простого приховування контенту? У цьому випадку стане у пригоді блок else
директиви *ngIf
. Він дозволяє посилатися на альтернативний шаблон за допомогою <ng-template>
з власною міткою.
task-list.ts
task-list.css
Відбувається наступне:
-
Angular спочатку перевіряє, чи містить масив
tasks
елементи; -
Якщо так, відображається
<div>
із компонентами завдань; -
Якщо масив порожній, використовується шаблон
#noTasks
і виводиться повідомлення: "No tasks yet 😊".
Це робить ваші шаблони значно чистішими та допомагає зручно керувати порожніми станами.
1. Що робить директива *ngIf
?
2. Яке призначення *ngFor
в Angular?
3. Що відбувається, якщо *ngIf="false"
?
Дякуємо за ваш відгук!