Keď bola zverejnená nová verzia Angular frameworku, na prvý pohľad to vyzeralo dobre. Na internete sa dala nájsť prehľadná tabuľka, ktorá porovnávala starú a novú verziu a ukazovala, ako sa zmenilo používané názvoslovie a niektoré princípy. Všetko nasvedčovalo tomu, že si stačí naštudovať týchto zopár rozdielov a človek môže upgradovať svoju aplikáciu. Bohužiaľ aj takéto zjednodušené pohľady na to, čo sa vlastne vo svete Angularu stalo, viedli k neskoršiemu rozčarovaniu a zmätku. Teraz sa skúsime pozrieť na to, prečo Angular nie je AngularJS.
Tím Angularu sa pri zverejňovaní novej verzie dopustil niekoľkých komunikačných chýb (a niektorých možno zámerne, ale k tomu neskôr). Výsledok je, že ľudia, ktorí pracovali s prvou verziou Angularu majú pocit, že svoju stránku len upgradnu na verziu 2 a ide sa ďalej. Bohužiaľ to nie je také jednoduché.
V prvom rade neexistuje žiadna prvá a druhá verzia Angular frameworku (to znie šokujúco, čo?). V skutočnosti existuje framework AngularJS (všimnite si hlavne to JS na konci) a iný framework, ktorý sa nazýva Angular (bez JS na konci). Ten prvý je písaný v JavaScripte, na svete sa objavil niekedy v roku 2010 a od tej doby vyšlo 6 rôznych hlavných verzií, t.j. verzie 1.0 až 1.6 (všetky spätne kompatibilné). Stránka tohto frameworku je https://angularjs.org/ (opäť si všimnite „js“ v názve).
Framework Angular je písaný v Typescripte, zrodil sa v roku 2016 a od vtedy vyšlo niekoľko jeho verzií (presnejšie verzie 2, 4 a 5 – chýbajúca jednotka a trojka ešte viac prispieva zmätku). Tieto verzie sú spätne kompatibilné.
Takže najpodstatnejšie je uvedomiť si, že sa tu nebavíme o rôznych verziách toho istého frameworku, ale o dvoch rôznych frameworkoch. Je fakt, že Angular je silne inšpirovaný AngularJS. Základné princípy ma rovnaké, prebral aj veľa z pôvodného názvoslovia, ale na druhej strane tým Angularu si uvedomil, že AngularJS mal veľa nedostatkov, ktoré sa rozhodli zmeniť, pričom všetky tie zmeny urobili naraz a výsledok je, že medzi AngularJS a Angularom je tak veľa rozdielov.
Zároveň ale pravdepodobne nechceli prísť o komunitu vývojárov a prísť s tým, že „Urobili sme nový framework, staré aplikácie zahoďte a napíšete nanovo“. Preto radšej označili Angular ako Angular 2 a povedali, že je to ďalšia verzia toho istého frameworku, len nie je spätne kompatibilná.
Fakt je, že migrácia nemusí byť jednoduchá. Veľa závisí na tom, akú veľkú časť z AngularJS API aplikácia používa. Jeho veľká časť zmizla alebo bola prepísaná nanovo. Druhá vec, ktorá hneď udrie do očí je, že Angular je odporúčané písať v Typescripte. Sám framework je totiž v tomto jazyku napísaný, a ak sa pustíte do študovania dokumentácie zistíte, že aj keď framework oficiálne podporuje aj písanie kódu v JS, tak v skutočnosti dokumentácia pre JS verziu aplikácie úplne chýba alebo je veľmi chabá. Existuje v podstate len pre verziu 2 a aj tam sa viete stretnúť so stránkou ako je táto, kde je napísané, že táto verzia dokumentácie existuje len pre Typescript.
Typescript je transpiler (vykonáva kompiláciu medzi jazykmi rovnakej úrovne), ktorý umožňuje používať vlastnosti JS navrhnuté v ES 2016 a ES 2017 a k tomu pridáva statické typy. Je to v podstate nadmnožina JS, a teda na prvý pohľad si môžete povedať, že môžete začať písať Angular aplikáciu v Typescript tak, že budete písať JS, ale fakt je, že dokumentácia aj veľa knižníc tretích strán používa všetky tie Typescript super novinky, takže bez aspoň základného naštudovania sa ani nepohnete.
K tej skupine nejasností sa ešte pridalo samotné verzionovanie. Angular používa sémantické verzionovanie a má zatiaľ tri majoritné verzie: 2, 4 a 5 (blíži sa verzia 6). Verzia 3 chýba. Je to preto, lebo skôr ako uzrela táto verzia svetlo svetla, zverejnili omylom verziu NPM router balíka 3.3 a aby sa vyhli zmätku, rozhodli sa celú verziu 3 preskočiť (viac v tomto článku). Takisto chýba verzia 1, pretože AngularJS má byť tá verzia 1, ale to je naozaj viac marketingový ťah ako realita.
Čerešničkou na torte je otázka, ako dlho bude AngularJS podporovaný. Odpoveď je šalamúnska, že tak dlho, ako bude mať stránka s dokumentáciou AngularJS dosť dotazov denne. Teda momentálne nie je jasný žiaden konkrétny dátum.
Čo teda Angular je, ak to nie je ďalšia verzia AngularJS? Je to Typescriptovy MVC framework so silnou podporou pre servisnú vrstvu. Tri základné funkčnosti sú:
1. Komponenty a direktívy pre rozčlenenie kódu
2. Dependency injection + servisná vrstva
3. Schopnosť vytvárať formuláre (template forms vs. model-driven) z direktív, komponent a pomocou one-way bindingu
K tomu sa pridávajú veci ako Pipes, Router a množstvo podporných modulov. Angular je framework, ktorý si zaslúži samostatnú sériu článkov a v blízkej dobe sa k nemu na tomto blogu plánujem vrátiť.
Pri zverejňovaní novej verzie je možné urobiť množstvo chýb a Googlu sa podarilo ich spraviť hneď niekoľko. Hlavnou príčinou je, že chcel zverejniť nový framework ako ďalšiu verziu existujúceho, a pritom si zvolil nepatrnú odchýlku v názve, ktoré ich odlišuje („JS“ na konci). Keďže ale postupy pre riešenie nejakého problému v jednom alebo druhom sú odlišné, úžasne to komplikuje ich hľadanie na internete. Ak napríklad zadám do vyhľadávača „angular router problem“, tak nájdený výsledok je mix stránok pre AngularJS a Angular. Je potom nutné v tom ručne dohľadávať, čo je naozaj pre Angular a čo je jeho staršieho brata. Následne je možné skúsiť zadať „angular 2 router problem“, čo už odfiltruje väčšinu AngularJS stránok, ale zase aj tie čo pojednávajú o Angular 4 alebo 5. Jediný vyhľadávač, ktorý si s tým vie ako tak poradiť a rozlišuje medzi AngularJS a Angular je (logicky) Google.
Záverom sa dá teda povedať toľko, že AngularJS nie je Angular. Sú to dva rôzne frameworky postavené na rovnakých princípoch. Okolo samotného releasu Angular vzniklo ale toľko nejasností a špecialít, že tento jednoduchý fakt sa v tom úplne stratil.