SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Андрей Кулешов

AngularJS
Фреймворк для создание приложений на HTML/JS
SPA, MVC, MVVM и другие акронимы
Вновь рассказ будет начинаться с самого начала
▪ Сначала был HTML
Слабо стандартизованный и с небольшими возможностями
▪ Ещѐ были LiveScript, JavaScript и JScript, но это совсем грустная сказка…

▪ Веб-приложений тогда ещѐ не было и не планировалось
Были веб-странички
Потом был GMail, появилась jQuery…
(несколько эпох пропущено)

▪ Это были одни из нескольких веховых событий, когда программисты стали
думать, что кроме веб-страничек они могут писать ещѐ и веб-сайты
А самые отчаянные стали замахиваться на веб-приложения
▪ Число их начало расти, сложность - увеличиваться
Чего ещѐ нужно для счастья?
▪ Разметка и код получаются чрезмерно размазанными и слабо
структурированными
▪ Каждый разработчик может придумывать под себя свои правила того, где и
как писать какой код
▪ В новой эре веб-приложений, написанных на JavaScript, встали проблемы
управления сложностью
AngularJS
▪ Релиз в 2009
▪ Изначально опенсурсный проект, сделанные сотрудниками Гугл,
работавшими над проектом Google Feedback

▪ Текущая стабильная версия 1.2.3 (27 ноября 2013 г.)
▪ Размер библиотеки в минимизированном виде - 97 кБ
Какие цели и задачи
▪ Декларативное расширение HTML новыми элементами / аттрибутами директивами
▪ Построение UI на основе шаблонов, связанных с моделью ($scope в
терминологии AngularJS – «область видимости»)
$scope.userGroup = {
name: "GetDev.NET“
};
<div>Hello, {{UserGroup.name}}!</div>
▪ Любое изменение UI – должно быть следствием изменения модели
Работа с DOM страницы напрямую из контроллера – признак того, что что-то
идѐт не так
▪ Описывают себя как MV*-фреймворк
Паттерн MVC – основная структурная единица
Работает по принципу MVVM, но этот слово было придумано в
Майкрософт, и если его употребит разработчик из Гугл – то сгорит
Сложные семейные
отношения внутри
AngularJS
Angular
Directives
ngClass,
ngShow,
ngModel, …

Module
Module
MyApp
MyApp

Service
Directive
Warninger
gd-name

Service
Service
Warninger
Warninger

Model ($scope)

DOM
<html> … </html>

Module
Module
OtherModule1
Module
OtherModule1
OtherModule1

Service
Controller
Warninger
EventsCtrl

Angular Services
$http, $cookie, …
С чего начинается AngularJS-приложение?
▪ Сначала мы пишем страницу на обычном HTML(5)
▪ Потом мы подключаем к нему скрипт Angular
▪ И в разметке указываем, что это – Angular-приложение
<html ng-app> … </html>
(«ng» - акроним, созвучный с названием Angular)
▪ ng-app здесь – это первая и начальная «директива»
▪ Пишем первый контроллер и помещаем его в глобальное пространство
имѐн, нарушая все каноны
window.EventsCtrl = function($scope) { … };
▪ Указываем на элементе разметки, что он должен обслуживаться
<body ng-controller="EventsCtrl">
Демо

▪ Создание простейшего приложения
▪ Создание шаблона
▪ Реакция на события
Обновление данных
▪ Место, где случается магия
▪ AngularJS мистическим образом отслеживает состояние модели – включая
не только сложные объекты, но и примитивные типы – Number, bool…

▪ Время, когда случается магия:
- реакция на стандартные директивы (ngModel)
- организация наблюдения за моделью ($watch)
- явный вызов команды модели «применить изменения» - $apply
Директивы «из коробки»
▪ ngModel – связывание элемента с моделью
▪ ngShow / ngHide – видимость элемента
▪ ngClass – добавление CSS-классов на элемент в зависимости от свойств
модели
▪ ngHref – задание пути для ссылочного элемента <a>
▪ ngSubmit – переопределния события отправки HTML-формы на сервер
Рефакторинг - модули
▪ var module = angular.module("MyApp", []);
module.controller("EventsCtrl", function($scope) { … });

▪ <html ng-app="MyApp">
Написание своих директив
module.directive("gdName", function () {
return {
link: function ($scope, element) {
element[0].innerHTML = "<b>GetDev.NET</b>";
}

};
});
<div gd-name></div>
▪ element - либо jQuery-объект (если подключено), либо объект jqLite – псевдомини-почти-совместимой-реализации, входящей в библиотеку AngularJS
Dependency Injection
▪ Каждый компонент бизнес-логики – контроллер или сервис (см. ниже) – говорит
AngularJS о том, какие компоненты ему нужны для работы
А AngularJS с помощью магии их ему предоставляет
Либо выкидывает исключение «Зависимость не найдена»
▪ Это провоцирует разработчика использовать подход Single Responsibility – одна
логическая единица кода должна делать одну вещь, а не несколько разных,
слегка связанных между собой
▪ Стандартные сервисы, предоставляемые с Ангуляром, играют и вторую важную
роль – отделяют код программиста от глобальных объектов – window, сеть и т.п.
▪ Стандартные сервисы:
$http
$location
$routeParams
… довольно много
Рефакторинг - сервисы
Усложнение – несколько View
Single Page Application
▪ Роутинг – возможность показа нескольких «страниц» внутри одной и той же
реальной html-страницы
▪ Со словом «страница» в этой концепции вообще большие проблемы (см.
тут)
▪ В разметке определяется элемент, внутрь которого будет помещаться
заменяемое содержимое
▪ Добавляем разметку в виде отдельного файлика для каждой «страницы»

▪ Добавляем правила роутинга, который определяет соотношения между
адресом URL и парой view-controller, которые выполняются при навигации на
этот URL
▪ Поддерживает HTML5 History API (но его ещѐ надо настроить на стороне
сервера), либо падает до навигации через #:
http://getdev.net#event/angularjs
Unit-testing
▪ То, ради чего всѐ затевалось
▪ Возможность протестировать логику работы приложения без необходимости настройки
внешних сервисов и окружени
▪ Используется собственный движок для юнит-тестирования, использующий Node.js – Karma
describe(‘GetDev controllers', function () {
describe(‘MainCtrl', function () {
it('should create "phones" model with 3 phones', function () {
var scope = {},
ctrl = new MainCtrl(scope);
expect(scope.events.length).toBe(3);
});
});
});
▪ Из коробки предоставляются мок-объекты для стандартных сервисов
Доклад заканчивается, но многое не было сказано
▪ Нечто для облегчения разработки под AngularJS
Yeoman
http://yeoman.io
▪ Мало сказано про фильтры
{{ item.totalAmount | currency }}
▪ Не говорили про валидацию
▪ Работа с виджетами jQuery UI, изначально для AngularJS не
предназначенными
▪ Интеграция с RequireJS
▪ Batarang – плагин для Chrome для облегчения отладки
Интересное чтение
▪ http://angularjs.org
▪ AngularJS от авторов фреймворка
Интересное видео
▪ Angular JS Channel
▪ Using AngularJS in an ASP.Net Application
Вопросы?
Внимательно слушаю! 
Андрей Кулешов
kaa-tula@ya.ru
akuleshov.tula

Специально для http://GetDev.NET

Weitere ähnliche Inhalte

Was ist angesagt?

Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеCodeFest
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил РеенкоJSib
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
презентация вводного доклада Angular на fronttalks.ru
презентация вводного доклада Angular на fronttalks.ruпрезентация вводного доклада Angular на fronttalks.ru
презентация вводного доклада Angular на fronttalks.ruIvan Gromov
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016Anastasia Goryacheva
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияIgor Sazonov
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Vladimir Malyk
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Ontico
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)DrupalYug
 

Was ist angesagt? (20)

Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотите
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
презентация вводного доклада Angular на fronttalks.ru
презентация вводного доклада Angular на fronttalks.ruпрезентация вводного доклада Angular на fronttalks.ru
презентация вводного доклада Angular на fronttalks.ru
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для понимания
 
CodeFest dirty facts about AngularJS
CodeFest dirty facts about AngularJSCodeFest dirty facts about AngularJS
CodeFest dirty facts about AngularJS
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
non-blocking java script
non-blocking java scriptnon-blocking java script
non-blocking java script
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)
 
Background js
Background jsBackground js
Background js
 

Ähnlich wie AngularJS

Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex PetrovReal-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex PetrovRuby Meditation
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыUA Mobile
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Кирилл Толкачёв
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 
Mobile Web Apps development essentials
Mobile Web Apps development essentialsMobile Web Apps development essentials
Mobile Web Apps development essentialsPavlo Iuriichuk
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем ТитаренкоCodeFest
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakAmasty
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...e-Legion
 

Ähnlich wie AngularJS (20)

Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex PetrovReal-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
Mobile Web Apps development essentials
Mobile Web Apps development essentialsMobile Web Apps development essentials
Mobile Web Apps development essentials
 
Lime.JS
Lime.JSLime.JS
Lime.JS
 
Angular js
Angular jsAngular js
Angular js
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем Титаренко
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 

Mehr von GetDev.NET

Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееGetDev.NET
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеGetDev.NET
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковGetDev.NET
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКGetDev.NET
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIGetDev.NET
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013GetDev.NET
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego MindstormsGetDev.NET
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8GetDev.NET
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложенийGetDev.NET
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервисGetDev.NET
 
Обзор рекомендаций W3C
Обзор рекомендаций W3CОбзор рекомендаций W3C
Обзор рекомендаций W3CGetDev.NET
 

Mehr von GetDev.NET (20)

Go
GoGo
Go
 
Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущее
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучше
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиков
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego Mindstorms
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложений
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервис
 
ASP.NET MVC 4
ASP.NET MVC 4ASP.NET MVC 4
ASP.NET MVC 4
 
Обзор рекомендаций W3C
Обзор рекомендаций W3CОбзор рекомендаций W3C
Обзор рекомендаций W3C
 
WinRT
WinRTWinRT
WinRT
 

AngularJS

  • 1. Андрей Кулешов AngularJS Фреймворк для создание приложений на HTML/JS SPA, MVC, MVVM и другие акронимы
  • 2. Вновь рассказ будет начинаться с самого начала ▪ Сначала был HTML Слабо стандартизованный и с небольшими возможностями ▪ Ещѐ были LiveScript, JavaScript и JScript, но это совсем грустная сказка… ▪ Веб-приложений тогда ещѐ не было и не планировалось Были веб-странички
  • 3. Потом был GMail, появилась jQuery… (несколько эпох пропущено) ▪ Это были одни из нескольких веховых событий, когда программисты стали думать, что кроме веб-страничек они могут писать ещѐ и веб-сайты А самые отчаянные стали замахиваться на веб-приложения ▪ Число их начало расти, сложность - увеличиваться
  • 4. Чего ещѐ нужно для счастья? ▪ Разметка и код получаются чрезмерно размазанными и слабо структурированными ▪ Каждый разработчик может придумывать под себя свои правила того, где и как писать какой код ▪ В новой эре веб-приложений, написанных на JavaScript, встали проблемы управления сложностью
  • 5. AngularJS ▪ Релиз в 2009 ▪ Изначально опенсурсный проект, сделанные сотрудниками Гугл, работавшими над проектом Google Feedback ▪ Текущая стабильная версия 1.2.3 (27 ноября 2013 г.) ▪ Размер библиотеки в минимизированном виде - 97 кБ
  • 6. Какие цели и задачи ▪ Декларативное расширение HTML новыми элементами / аттрибутами директивами ▪ Построение UI на основе шаблонов, связанных с моделью ($scope в терминологии AngularJS – «область видимости») $scope.userGroup = { name: "GetDev.NET“ }; <div>Hello, {{UserGroup.name}}!</div> ▪ Любое изменение UI – должно быть следствием изменения модели Работа с DOM страницы напрямую из контроллера – признак того, что что-то идѐт не так ▪ Описывают себя как MV*-фреймворк Паттерн MVC – основная структурная единица Работает по принципу MVVM, но этот слово было придумано в Майкрософт, и если его употребит разработчик из Гугл – то сгорит
  • 7. Сложные семейные отношения внутри AngularJS Angular Directives ngClass, ngShow, ngModel, … Module Module MyApp MyApp Service Directive Warninger gd-name Service Service Warninger Warninger Model ($scope) DOM <html> … </html> Module Module OtherModule1 Module OtherModule1 OtherModule1 Service Controller Warninger EventsCtrl Angular Services $http, $cookie, …
  • 8. С чего начинается AngularJS-приложение? ▪ Сначала мы пишем страницу на обычном HTML(5) ▪ Потом мы подключаем к нему скрипт Angular ▪ И в разметке указываем, что это – Angular-приложение <html ng-app> … </html> («ng» - акроним, созвучный с названием Angular) ▪ ng-app здесь – это первая и начальная «директива» ▪ Пишем первый контроллер и помещаем его в глобальное пространство имѐн, нарушая все каноны window.EventsCtrl = function($scope) { … }; ▪ Указываем на элементе разметки, что он должен обслуживаться <body ng-controller="EventsCtrl">
  • 9. Демо ▪ Создание простейшего приложения ▪ Создание шаблона ▪ Реакция на события
  • 10. Обновление данных ▪ Место, где случается магия ▪ AngularJS мистическим образом отслеживает состояние модели – включая не только сложные объекты, но и примитивные типы – Number, bool… ▪ Время, когда случается магия: - реакция на стандартные директивы (ngModel) - организация наблюдения за моделью ($watch) - явный вызов команды модели «применить изменения» - $apply
  • 11. Директивы «из коробки» ▪ ngModel – связывание элемента с моделью ▪ ngShow / ngHide – видимость элемента ▪ ngClass – добавление CSS-классов на элемент в зависимости от свойств модели ▪ ngHref – задание пути для ссылочного элемента <a> ▪ ngSubmit – переопределния события отправки HTML-формы на сервер
  • 12. Рефакторинг - модули ▪ var module = angular.module("MyApp", []); module.controller("EventsCtrl", function($scope) { … }); ▪ <html ng-app="MyApp">
  • 13. Написание своих директив module.directive("gdName", function () { return { link: function ($scope, element) { element[0].innerHTML = "<b>GetDev.NET</b>"; } }; }); <div gd-name></div> ▪ element - либо jQuery-объект (если подключено), либо объект jqLite – псевдомини-почти-совместимой-реализации, входящей в библиотеку AngularJS
  • 14. Dependency Injection ▪ Каждый компонент бизнес-логики – контроллер или сервис (см. ниже) – говорит AngularJS о том, какие компоненты ему нужны для работы А AngularJS с помощью магии их ему предоставляет Либо выкидывает исключение «Зависимость не найдена» ▪ Это провоцирует разработчика использовать подход Single Responsibility – одна логическая единица кода должна делать одну вещь, а не несколько разных, слегка связанных между собой ▪ Стандартные сервисы, предоставляемые с Ангуляром, играют и вторую важную роль – отделяют код программиста от глобальных объектов – window, сеть и т.п. ▪ Стандартные сервисы: $http $location $routeParams … довольно много
  • 16. Усложнение – несколько View Single Page Application ▪ Роутинг – возможность показа нескольких «страниц» внутри одной и той же реальной html-страницы ▪ Со словом «страница» в этой концепции вообще большие проблемы (см. тут) ▪ В разметке определяется элемент, внутрь которого будет помещаться заменяемое содержимое ▪ Добавляем разметку в виде отдельного файлика для каждой «страницы» ▪ Добавляем правила роутинга, который определяет соотношения между адресом URL и парой view-controller, которые выполняются при навигации на этот URL ▪ Поддерживает HTML5 History API (но его ещѐ надо настроить на стороне сервера), либо падает до навигации через #: http://getdev.net#event/angularjs
  • 17. Unit-testing ▪ То, ради чего всѐ затевалось ▪ Возможность протестировать логику работы приложения без необходимости настройки внешних сервисов и окружени ▪ Используется собственный движок для юнит-тестирования, использующий Node.js – Karma describe(‘GetDev controllers', function () { describe(‘MainCtrl', function () { it('should create "phones" model with 3 phones', function () { var scope = {}, ctrl = new MainCtrl(scope); expect(scope.events.length).toBe(3); }); }); }); ▪ Из коробки предоставляются мок-объекты для стандартных сервисов
  • 18. Доклад заканчивается, но многое не было сказано ▪ Нечто для облегчения разработки под AngularJS Yeoman http://yeoman.io ▪ Мало сказано про фильтры {{ item.totalAmount | currency }} ▪ Не говорили про валидацию ▪ Работа с виджетами jQuery UI, изначально для AngularJS не предназначенными ▪ Интеграция с RequireJS ▪ Batarang – плагин для Chrome для облегчения отладки
  • 19. Интересное чтение ▪ http://angularjs.org ▪ AngularJS от авторов фреймворка
  • 20. Интересное видео ▪ Angular JS Channel ▪ Using AngularJS in an ASP.Net Application
  • 21. Вопросы? Внимательно слушаю!  Андрей Кулешов kaa-tula@ya.ru akuleshov.tula Специально для http://GetDev.NET