Я почав писати цей конспект від початку 2015-го, за цей час вийшов AngularJS 2, напевне варто переписати. Хоча другий Angular написаний на TypeScript, тому він напевне вже не JS. Або вивчити React і написати конспект для нього. Вибір безмежний. :)
Написано на основі шикарного курсу від Code School. Просто щоб не передивлятись кожного разу перед тим як знову засвербить щось написати для фронт-енду.
Angular.js дозволяє писати шаблони прямо в HTML, розширюючи його своїми директивами, а потім автоматично заповнюючи даними.
Директива – це маркер (атрибут тегу) чи тег HTML що каже Angular-у запустити якийсь JavaScript код.
Єдиний файл що потрібен для початку роботи – angular.js.
Модулі
Код в Angular.js поміщається в модулі. Модулі містять код і описують залежності.
Щоб створити модуль пишемо:
var app = angular.module('store', []);
Перший аргумент – назва модуля, другий – список залежностей (якщо без залежностей – то порожній).
Тоді в html пишемо:
<html ng-app="store">
І це запустить наш модуль коли документ завантажиться.
І хоча наш модуль нічого не робить, але його включення вже допомагає розглядати код html який ми пишемо як директиви Angular.
Після чого можна писати на сторінці вирази. Як от
<p>2 + 2 = {{2 + 2}}</p>
Контролери
Щоб передати дані з JS в HTML, потрібно використати контролер:
var gem = {
name: 'Dodecahedron',
price: 10,
};
app.controller('StoreController', function() {
this.product = gem;
});
Важливо щоб контролери називались КемелКейсом і останнім словом завжди було Controller.
Далі, в html, пишемо
<div ng-controller="StoreController as store">
<h1>{{store.product.name}}</h1>
<h2>{{store.product.price}}</h2>
</div>
store
– аліас який ми описали і що використовується всередині виразів. Доступний лише всередині елементу для якого описаний контролер.
Директиви
ng-show
– покаже елемент лише коли значення виразу істинне.
<div ng-controller="StoreController as store">
<button ng-show="store.product.canPurchase">Add to Cart</button>
</div>
ng-hide
– навпаки, сховає елемент коли значення істинне.
ng-repeat
– повторить елемент ітеруючи по якомусь списку.
ng-click
– виконає код написаний всередині значення директиви при кліку по ньому.
ng-init
– виконає код написаний всередині значення директиви при відображенні сторінки. Не користуйтесь ним, покладіть код який хочете покласти туди, всередину контролера.
<div ng-controller="StoreController as store">
<div ng-repeat="product in store.products">
<button ng-show="product.canPurchase">Add to Cart</button>
</div>
</div>
ng-src
– директива що встановлює значення атрибуту src
в тегу на зразок img
. Тому що встановлення його значення через <img src="{{value}}">
, призведе, перед тим як спрацює Angular, до спроби браузера завантажити файл “{{value}}
“, і помилки 404. А цього ми не хочемо.
ng-class="{ 'class1': condition1, class2: condition2 }"
– дозволяє додавати і забирати класи з елемента залежно від значення виразів умов.
Фільтри
При виводі даних в шаблонах, їх можна пропускати через фільтри. Загальний синтаксис:
<p>2 + 2 = {{вираз|фільтр:опції}}</p>
<!-- або так: -->
<li ng-repeat="product in store.products | limitTo:3 | orderBy:'-price'">
Форми
Директива ng-model
прив’язує значення елемента форми до моделі (атрибута контролера). Вони оновлюються автоматично.
Щоб якийсь код виконувався коли форма відправляється, ми додаємо цей код в значення директиви ng-submit
. І дописуємо директиву novalidate
, щоб вимкнути стандартну валідацію HTML.
<form name="reviewForm"
ng-controller="ReviewController as reviewCtrl"
ng-submit="reviewForm.$valid && reviewCtrl.addReview(product)"
novalidate
>
Angular автоматично додає до полів класи – ng-pristine
– до поля до якого ще не додавали код, ng-dirty
– до зміненого поля, і ng-invalid
– до поля що не проходить валідацію, та ng-valid
– до того що проходить.
Поля валідуються по атрибуту type
. Може бути наприклад email
, url
, number
(додатково є атрибути min
, max
).
Далі в курсі (ось слайди) ще йдеться про те як
- включати розмітку з інших файлів
- писати власні директиви і власні html елементи
- завантажувати дані через XHR
Щоправда, цього не треба щоб написати застосунок який я хочу написати. Але Про нього пізніше, бо github лежить, і вже трохи пізно. :)
Filed under:
Кодерство,
Павутина Tagged:
JavaScript