Створення Власних Директив у 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 допомагає писати більш модульний і підтримуваний код.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you show me the full code for the custom directive?
How do I use this directive in my component template?
What should I do if the directive styles are not being applied?
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 допомагає писати більш модульний і підтримуваний код.
Дякуємо за ваш відгук!