Створення Власних Директив у Angular
Angular має набір вбудованих директив, таких як ngIf
, ngFor
та ngClass
. Однак ви також можете створювати власні користувацькі директиви для виконання специфічних завдань у вашому застосунку. Розглянемо, як створити таку директиву на практичному прикладі.
Створення користувацької директиви
Спочатку рекомендується організувати код, створивши окрему папку для ваших директив. Назвемо її directives
.
Ця команда створює нову папку з назвою directives
у каталозі app
та додає до неї файл нової директиви:
-
highlight-on-complete.directive.ts
– містить логіку директиви; -
highlight-on-complete.directive.spec.ts
– файл модульних тестів (можна видалити, якщо не потрібен).
Ось як виглядає базова структура директиви:
highlight-on-complete.ts
Визначення функціоналу директиви
Ця директива підсвічує елемент завдання зеленим кольором, якщо воно позначене як виконане. В іншому випадку стилі будуть очищені.
Щоб повідомити Angular, що цей клас є директивою, його декорують за допомогою @Directive
:
@Directive({
selector: '[appHighlightOnComplete]'
})
Селектор [appHighlightOnComplete]
означає, що директива буде використовуватися як атрибут, а не як тег або структурна директива.
У вашому HTML ви застосуєте її так:
<div [appHighlightOnComplete]="task.completed"></div>
Реакція директиви на зміни
Щоб виявляти зміни у вхідному параметрі completed, реалізуємо інтерфейс OnChanges
:
highlight-on-complete.ts
Ми також визначаємо вхідну властивість для отримання значення з компонента:
highlight-on-complete.ts
Що це робить:
-
Повідомляє Angular, що значення буде надано з шаблону (раніше ми передавали
task.complete
із шаблону); -
Прив'язує внутрішню властивість completed директиви до значення, переданого із шаблону;
-
Встановлює значення за замовчуванням true (яке буде перевизначено після отримання фактичних даних).
Безпечний доступ до DOM
Angular використовує впровадження залежностей для надання доступу до DOM і інструментів рендерингу.
У конструкторі ми впроваджуємо:
highlight-on-complete.ts
ElementRef
надає посилання на хост-елемент DOM. Renderer2
дозволяє безпечно змінювати стилі та атрибути без прямого маніпулювання DOM.
Реакція на зміни з ngOnChanges
Тепер реалізуємо основну логіку в ngOnChanges
, який виконується щоразу, коли змінюється значення вхідного параметра.
Повна реалізація:
highlight-on-complete.ts
Метод ngOnChanges
викликається щоразу, коли Angular виявляє зміни у вхідних властивостях директиви.
У цьому випадку він реагує на оновлення значення completed
, яке передається з шаблону. Якщо completed
дорівнює true
, директива додає зелений контур і світло-зелений фон до елемента. Якщо значення false
, ці стилі видаляються, і елемент повертається до початкового вигляду. Це забезпечує візуальне позначення виконаних завдань.
Ця користувацька директива дозволяє інкапсулювати поведінку стилів у багаторазовий, чистий спосіб. Тепер ви можете застосовувати її до будь-якого елемента у вашому застосунку без дублювання логіки у різних компонентах. Це чудовий приклад того, як система директив Angular допомагає писати більш модульний і підтримуваний код.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.13
Створення Власних Директив у Angular
Свайпніть щоб показати меню
Angular має набір вбудованих директив, таких як ngIf
, ngFor
та ngClass
. Однак ви також можете створювати власні користувацькі директиви для виконання специфічних завдань у вашому застосунку. Розглянемо, як створити таку директиву на практичному прикладі.
Створення користувацької директиви
Спочатку рекомендується організувати код, створивши окрему папку для ваших директив. Назвемо її directives
.
Ця команда створює нову папку з назвою directives
у каталозі app
та додає до неї файл нової директиви:
-
highlight-on-complete.directive.ts
– містить логіку директиви; -
highlight-on-complete.directive.spec.ts
– файл модульних тестів (можна видалити, якщо не потрібен).
Ось як виглядає базова структура директиви:
highlight-on-complete.ts
Визначення функціоналу директиви
Ця директива підсвічує елемент завдання зеленим кольором, якщо воно позначене як виконане. В іншому випадку стилі будуть очищені.
Щоб повідомити Angular, що цей клас є директивою, його декорують за допомогою @Directive
:
@Directive({
selector: '[appHighlightOnComplete]'
})
Селектор [appHighlightOnComplete]
означає, що директива буде використовуватися як атрибут, а не як тег або структурна директива.
У вашому HTML ви застосуєте її так:
<div [appHighlightOnComplete]="task.completed"></div>
Реакція директиви на зміни
Щоб виявляти зміни у вхідному параметрі completed, реалізуємо інтерфейс OnChanges
:
highlight-on-complete.ts
Ми також визначаємо вхідну властивість для отримання значення з компонента:
highlight-on-complete.ts
Що це робить:
-
Повідомляє Angular, що значення буде надано з шаблону (раніше ми передавали
task.complete
із шаблону); -
Прив'язує внутрішню властивість completed директиви до значення, переданого із шаблону;
-
Встановлює значення за замовчуванням true (яке буде перевизначено після отримання фактичних даних).
Безпечний доступ до DOM
Angular використовує впровадження залежностей для надання доступу до DOM і інструментів рендерингу.
У конструкторі ми впроваджуємо:
highlight-on-complete.ts
ElementRef
надає посилання на хост-елемент DOM. Renderer2
дозволяє безпечно змінювати стилі та атрибути без прямого маніпулювання DOM.
Реакція на зміни з ngOnChanges
Тепер реалізуємо основну логіку в ngOnChanges
, який виконується щоразу, коли змінюється значення вхідного параметра.
Повна реалізація:
highlight-on-complete.ts
Метод ngOnChanges
викликається щоразу, коли Angular виявляє зміни у вхідних властивостях директиви.
У цьому випадку він реагує на оновлення значення completed
, яке передається з шаблону. Якщо completed
дорівнює true
, директива додає зелений контур і світло-зелений фон до елемента. Якщо значення false
, ці стилі видаляються, і елемент повертається до початкового вигляду. Це забезпечує візуальне позначення виконаних завдань.
Ця користувацька директива дозволяє інкапсулювати поведінку стилів у багаторазовий, чистий спосіб. Тепер ви можете застосовувати її до будь-якого елемента у вашому застосунку без дублювання логіки у різних компонентах. Це чудовий приклад того, як система директив Angular допомагає писати більш модульний і підтримуваний код.
Дякуємо за ваш відгук!