Směrnice v Angularu: Klíčový prvek pro dynamické aplikace
Jednou ze zásadních vlastností frameworku Angular jsou takzvané směrnice (directives). Tyto směrnice umožňují obohacovat HTML elementy o specifické chování. Angular nabízí sadu zabudovaných směrnic, ale díky jeho flexibilitě můžete si vytvářet i vlastní, zcela na míru vašim potřebám.
Co jsou to směrnice?
Směrnice představují specifický kód, který Angular využívá pro změnu chování nebo vizuální podoby HTML elementů. S jejich pomocí lze například přidávat posluchače událostí, transformovat strukturu DOM (Document Object Model) nebo dynamicky zobrazovat a skrývat elementy.
V Angularu se setkáme se dvěma hlavními typy vestavěných směrnic: strukturální a atributové. Strukturální směrnice se zaměřují na modifikaci samotné struktury DOM, zatímco atributové upravují vzhled nebo chování elementů. Směrnice jsou mocným nástrojem pro rozšíření funkčnosti Angular komponent.
Výhody používání směrnic
Používání směrnic v Angularu přináší řadu výhod:
- Opakované použití: Jednou vytvořenou směrnici můžete aplikovat v různých komponentách, což šetří váš čas i úsilí.
- Rozšiřitelnost: Směrnice lze rozšiřovat a přidávat jim nové funkcionality, čímž se zvyšuje výkonnost komponent.
- Flexibilita: Díky směrnicím máte možnost modifikovat chování a vzhled elementů různými způsoby, což vám dává velkou volnost při vytváření aplikací.
Zprovoznění Angular aplikace
Pro začátek s vývojem v Angularu je potřeba nainstalovat Angular CLI (Command Line Interface). Učiníte tak v terminálu spuštěním následujícího příkazu:
npm install -g @angular/cli
Po instalaci Angular CLI můžete vytvořit nový Angular projekt pomocí příkazu:
ng new custom-directives-app
Tento příkaz vygeneruje nový projekt s názvem „custom-directives-app“.
Vytvoření vlastní směrnice
Jakmile je projekt vytvořen, můžete se pustit do tvorby vlastní směrnice. Pro tento účel vytvořte nový TypeScript soubor a v něm definujte třídu, kterou označíte dekorátorem @Directive
.
Dekorátor @Directive
slouží k označení třídy jako vlastní směrnice. Nyní v adresáři src/app
vytvořte soubor highlight.directive.ts
, ve kterém vytvoříte směrnici pro zvýraznění.
Například takto:
import { Directive } from "@angular/core"; @Directive({ selector: "[myHighlight]", }) export class HighlightDirective { constructor() {} }
Výše uvedený kód importuje dekorátor Directive
z modulu @angular/core
. Tento dekorátor označuje třídu HighlightDirective
jako směrnici. Jako argument přebírá objekt s vlastností selector
.
V tomto případě je selector
nastaven na [myHighlight]
, což znamená, že tuto směrnici můžete použít v šablonách přidáním atributu myHighlight
k danému elementu.
Zde je příklad použití směrnice v šabloně:
<main> <p myHighlight>Some text</p> </main>
Přidání chování směrnice
Směrnice je nyní vytvořena, dalším krokem je přidání kódu, který umožní manipulovat s DOM. K tomu využijeme ElementRef
z @angular/core
.
ElementRef
se vkládá do konstruktoru směrnice. Jedná se o obálku kolem nativního elementu uvnitř pohledu.
Následující příklad ukazuje, jak přidat chování do směrnice:
import { Directive, ElementRef } from "@angular/core"; @Directive({ selector: "[myHighlight]" }) export class HighlightDirective { constructor(private element: ElementRef) { this.element.nativeElement.style.backgroundColor="lightblue"; } }
V tomto příkladu konstruktor třídy HighlightDirective
přebírá parametr ElementRef
, který Angular automaticky vkládá. ElementRef
poskytuje přístup k základnímu DOM elementu.
Pomocí this.element.nativeElement
získáte přístup k nativnímu DOM elementu. Dále pomocí vlastnosti style
nastavíte barvu pozadí na světle modrou. To znamená, že jakýkoli element, na který použijete směrnici myHighlight
, bude mít světle modré pozadí.
Aby směrnice fungovala, je nutné ji importovat a deklarovat v souboru app.module.ts
.
Například takto:
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { HighlightDirective } from './highlight.directive'; @NgModule({ declarations: [ AppComponent, HighlightDirective, ], imports: [ BrowserModule, AppRoutingModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
Nyní můžete směrnici myHighlight
použít na elementy v libovolné Angular komponentě.
<main> <p myHighlight>Some text</p> </main>
Pro otestování, zda směrnice funguje, spusťte aplikaci pomocí vývojového serveru. Spustíte jej příkazem v terminálu:
ng serve
Poté v prohlížeči navštivte adresu http://localhost:4200/
. Pokud vše proběhlo správně, zobrazí se upravené rozhraní.
Vestavěné směrnice Angularu běžně přijímají hodnoty pro změnu vzhledu elementu. Vlastní směrnice myHighlight
zatím žádnou hodnotu nepřijímá. Nyní ji ale můžeme upravit tak, aby mohla přijímat hodnotu, která se použije pro dynamické nastavení barvy pozadí.
Provedeme to tak, že nahradíme kód v souboru highlight.directive.ts
následujícím:
import { Directive, ElementRef, Input } from "@angular/core"; @Directive({ selector: "[myHighlight]" }) export class HighlightDirective { @Input() set myHighlight(color: string) { this.element.nativeElement.style.backgroundColor = color; } constructor(private element: ElementRef) { } }
Ve výše uvedeném kódu obsahuje třída HighlightDirective
metodu setter s názvem myHighlight
. Tato metoda přijímá parametr color
typu string. Metoda je označena dekorátorem @Input
, který umožňuje předat hodnotu barvy z nadřazené komponenty do směrnice.
Nyní můžete určit barvu pozadí pomocí předání hodnoty do směrnice myHighlight
.
Například takto:
<main> <p myHighlight="pink">Some text</p> </main>
Vytvoření vlastní strukturální směrnice
V předchozích částech jsme se naučili vytvářet, přidávat chování a používat vlastní atributové směrnice. Atributové směrnice modifikují vzhled elementů, zatímco strukturální směrnice přidávají, odebírají nebo přesouvají elementy v DOM.
Angular nabízí dvě standardní strukturální směrnice: ngFor
a ngIf
. Směrnice ngFor
renderuje šablonu pro každou položku v kolekci (poli), zatímco ngIf
se používá pro podmíněné vykreslování.
V této části vytvoříme vlastní strukturální směrnici, která bude fungovat jako ngIf
. Vytvořte soubor condition.directive.ts
.
Do souboru condition.directive.ts
vložte následující kód:
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core' @Directive({ selector: "[condition]" }) export class ConditionDirective { @Input() set condition(arg: boolean) { if(arg) { this.viewContainer.createEmbeddedView(this.template) } else { this.viewContainer.clear(); } } constructor( private template: TemplateRef<unknown>, private viewContainer: ViewContainerRef ) {} }
Tento kód umožňuje podmíněné vykreslování elementů. Aplikujete směrnici condition
na element a předáte booleovskou hodnotu z nadřazené komponenty.
V konstruktoru třídy ConditionDirective
vložíte instanci TemplateRef
a ViewContainerRef
. TemplateRef
představuje šablonu přidruženou ke směrnici a ViewContainerRef
představuje kontejner, ve kterém aplikace vykresluje pohledy.
Metoda setter ve třídě ConditionDirective
používá příkaz if else
pro kontrolu parametru arg
. Pokud je parametr pravdivý, směrnice vytvoří vložený pohled pomocí poskytnuté šablony. Metoda createEmbeddedView
třídy ViewContainerRef
vytváří a renderuje pohled v DOM.
Pokud je parametr false
, směrnice vymaže kontejner zobrazení pomocí metody clear
třídy ViewContainerRef
. Tím se z DOM odstraní všechny dříve vykreslené pohledy.
Po vytvoření směrnice ji musíte zaregistrovat v projektu – importujte a deklarujte ji v app.module.ts
. Poté můžete začít používat tuto směrnici v šablonách.
Následuje příklad použití v šabloně:
<main> <p *condition="true">Hello There!!!</p> </main>
Nyní můžete tvořit vlastní směrnice
Vlastní směrnice v Angularu jsou mocným nástrojem pro manipulaci s DOM a přidávání dynamického chování do šablon. Naučili jste se vytvářet a používat vlastní atributové i strukturální směrnice. Pochopením principů tvorby a použití vlastních směrnic můžete naplno využít potenciál frameworku Angular.