Přeskočit na obsah

AngularJS

Z Wikipedie, otevřené encyklopedie
Logo AngularJS

AngularJS je javascriptový webový framework, který se zaměřuje na tvorbu single-page aplikací. Tyto aplikace jsou tvořeny pomocí HTML kódu, do kterého jsou vloženy speciální formátovací značky, které určují, jaké operace či data mají být na dané místo vloženy. Tento způsob se označuje jako data-binding.

AngularJS je volně dostupný na webu[1] pod MIT licencí. V současné době je největším přispěvatelem společnost Google, která tento framework v roce 2009 založila. Aktuálně se chystá nová verze pod označením AngularJS 2, která by měla přinést mnohé změny a taktéž má být nekompatibilní s předchozími verzemi.

Architektura

AngularJS byl navržen tak, aby pomohl tvůrcům stránek oddělovat zobrazovací logiku od aplikační logiky, bez větší znalosti programování. Pro tento účel AngularJS využívá návrhový vzor Model-View-Controller - případně alternativní vzor Model-View-ViewModel. [2] Díky tomuto abstraktnímu oddělení je většina aplikační logiky obsažena v modelu či controlleru. Tento controller nebo model je posléze vložen do $scope dané view šablony, která již může používat definované proměnné a pomocí speciálních direktiv je vypisovat či s nimi jakkoliv jinak manipulovat.

AngularJS taktéž hlídá změny, které se dějí na proměnných definovaných pro daný $scope. Tohoto je dosaženo pomocí takzvaného dirty-checkingu, který kontroluje zda se nová hodnota liší od staré. [3] Pokud se hodnota proměnné změnila, AngularJS ověří že je skutečně potřeba změnit DOM a aktualizuje view template do nejnovějšího stavu.[4] Tato funkcionalita přispívá k tomu, že se není potřeba starat o znovu vykreslování a hlídání změn a stačí se pouze zaměřit na výsledný vzhled aplikace.

Scope

Výraz scope se používá hlavně při programování v Javascriptu. Do češtinu se dá přeložit jako rámec nebo souvislost. AngularJS využívá vlastní implementaci scope, který díky tomu drží reference na všechny aktuální proměnné, které jsou na něm definovaný a taktéž části DOM, se kterým právě pracuje. Pro přístup slouží proměnná $scope, která je definovaná v AngularJS controlleru.[5]

Ukázka použít scope v controlleru.

function MyController($scope) {
     $scope.message = "Hello, world";
 }

Pro případnou komunikaci mezi jednotlivými scope, se používá takzvaný $rootScope, který je rodičem všech ostatních $scope.

Controller

AngularJS pro svoji práci využívá controllery. Každý controller je připojen k HTML DOMu pomocí direktivy ng-controller. Každý controller má pro svoji práci vlastní $scope, ve které má uloženy hodnoty a objekty, se kterými může pracovat.

Controllery by se měli využívat pro tyto případy:

  • Nastavení počátečního stavu objektu $scope
  • Upravení chování $scope

Na všechny ostatní případy, by se měli používat specializované AngularJS komponenty, které umožňují komunikaci mezi controllerem a view modelem.

CSS třídy

AngularJS využívá různé CSS třídy pro definování stavu modelu.

  • ng-valid: model je validní
  • ng-invalid: model je nevalidní
  • ng-valid-[key]: pro všechny validní klíče nastavené pomocí $setValidity
  • ng-invalid-[key]: pro všechny nevalidní klíče nastavené pomocí $setValidity
  • ng-pristine: s prvkem se ještě nemanipulovalo
  • ng-dirty: s prvekem již bylo manipulováno
  • ng-touched: někdo se již dotknul prvku
  • ng-untouched: prvek zatím nebyl dotčen
  • ng-pending: některé prvky jsou stále nesplyněny - viz $asyncValidators

Filtry

Filtry slouží k tomu, aby se snadno daly měnit hodnoty, které se zobrazují uživateli ve view template. Tyto filtry se mohou požívat také v controlleru nebo modelu.

Ukázka použití:

{{ expression | filter }}

Data Binding

Ukázka data-bindingu

AngularJS umožňuje pomocí speciálního zápisu vkládat dynamický obsah do statického HTML. Všechen tento obsah musí být definován ve $scope.

Místo, kam se má dynamicky umístit obsah se označuje pomocí složených závorek:

{{ expression }}

Do tohoto zápis lze zapsat samotnou proměnnou a nebo i jednu z těchto povolených operací:

  • {{ 1 + 1 }} // sčítání
  • {{ a + b }} // práce s proměnnými
  • {{ user.name }} // práce s objekty
  • {{ collection[index] }} // práce s kolekcemi

Ukázka data bindingu:

<input type="text" value="{{ user.name }}">

Hello World

Ukázka kompletní použít AngularJS pro vytvoření nejednodušší aplikace Hello World.

<!DOCTYPE html>
<html ng-app="helloWorld">
<head>
    <title>Hello World</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script>
	var module = angular.module("helloWorld", []);
	module.controller("myController", function($scope) {
	     $scope.world = "World";
	});
    </script>
</head>
<body ng-controller="myController">
    <h1>Hello <nowiki>{{ world }}</nowiki></h1>
</body>
</html>

Zajímavé odkazy

  1. Začínáme s AngularJS
  2. Úvod do AngularJS
  3. Jednoduchá Todo aplikace v AngularJS
  4. Workshop na DevFest o AngularJS

Reference