SlideShare uma empresa Scribd logo
1 de 14
AngularJS 
АЛЬТЕРНАТИВА JQUERY. ВВЕДЕНИЕ И ОСНОВЫ 
06.09.2014 Saint-Petersburg WordPress Meetup #2 
Igor Sazonov @tigusigalpa
План доклада 
 Что такое AngularJS 
 Область применения. Откуда такая популярность? Конкуренты 
 Плюсы и минусы. Чем отличается от jQuery 
 Архитектура AngularJS 
 Наглядные простейшие примеры. Что такое контроллеры 
 Простой пример реализации табов на AngularJS и jQuery 
 Некоторые «подводные камни»: настройка AJAX 
 Зачем AngularJS WordPress’у? 
 Где искать документацию и помощи?
Что такое AngularJS? 
 JavaScript MVC-фреймворк от Google 
 URL: https://angularjs.org 
 Год создания: 2009 
 Текущая версия: 1.2.22 / 1.3.0-beta (20.08.2014) 
 Вес: 105кб
Область применения. Откуда 
такая популярность? Конкуренты 
 Идеален для Single Page Application (SPA) приложений 
(«богатое» приложение, генерирующее и изменяющее 
большой объем DOM’а «на лету» без перезагрузки страницы) 
 «Умный». Додумывает за разработчика. Например ng-show 
скрывает элемент, если он не удовлетворяет условию. 
 Код более сложный, но его в разы меньше 
 Никакой привязки к #id и .class для работы с элементами =))))) 
 Основные конкуренты: Backbone.js, KnockoutJS, ember.js
Плюсы и минусы. Чем отличается 
от jQuery 
Плюсы 
 Меньше кода (иногда в разы!) 
 Более высокий уровень 
программирования 
 Совместим с jQuery + jqLite 
 Подходит для сложных SPA- 
приложений 
 Забудьте про наименование 
классов или #id-шников 
 Будущее Front-End разработки 
 Постоянно дорабатывается 
………..Google-ом =)) 
 Построен на watcher’ах 
Минусы 
 Сложнее в изучении 
 «Переадаптация» требует 
времени 
 Весит больше (105 > 83 кб) 
 Неочевидные решения 
 Постоянно дорабатывается
Плюсы и минусы. Чем отличается 
от jQuery 
Применимость AngularJS относительно jQuery 
jQuery 
AngularJS 
Сложность приложения 
SPA
Архитектура AngularJS 
Module – модуль – глобальное 
хранилище для Вашего приложения 
(контроллеры, роуты, вьюхи) 
Config – конфиг – настройки модуля 
Routes – «менеджер» контроллеров для 
урлов типа #/someurl 
Controller – контроллер – логика 
отдельных частей модуля (приложения) 
View – представление html контроллера 
$scope – глобальный объект (со всеми 
данными) контроллера 
Directives – кастомное поведение html 
Factory – фабрика (сервис)
Наглядные простейшие 
примеры. Что такое контроллеры 
<!doctype html> 
<html ng-app> 
<head> 
<script 
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0- 
beta.19/angular.min.js"></script> 
</head> 
<body> 
<div> 
<label>Name:</label> 
<input type="text" ng-model="yourName" 
placeholder="Enter a name here"> 
<hr> 
<h1>Hello {{yourName}}!</h1> 
</div> 
</body> 
</html>
Наглядные простейшие 
примеры. Что такое контроллеры 
<html ng-app="SimpleModule"> 
<head><meta charset="UTF-8" /><title>Простой 
модуль</title><script 
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2. 
23/angular.min.js"></script><script 
src=“simpleModule.js"></script></head> 
<body ng-controller="MyController"> 
<h1>Демо {{title}}</h1> 
<div><p><label for="valA">Ввведите 
А:</label><input type="number" id="valA" ng-model=" 
valA" /></p><p><label for="valB">Ввведите 
B:</label><input type="number" id="valB" ng-model=" 
valB" /></p><p>Результат: 
{{result}}</p><p><button ng-click=" 
add(valA,valB);">Сложить</button><button ng-click=" 
multiple(valA,valB);">Умножить</button></p></di 
v> 
</body> 
</html> 
simpleModule.js 
var myApp = 
angular.module('SimpleModule', []); 
myApp.controller('MyController', 
['$scope', function($scope) { 
$scope.title = 'Простой модуль'; 
$scope.result = 0; 
$scope.add = function(a,b) { 
$scope.result = a + b; 
}; 
$scope.multiple = function(a,b) { 
$scope.result = a * b; 
}; 
}]);
Простой пример реализации 
табов на AngularJS и jQuery 
jQuery 
jQuery( ‘.tab-content’ ).hide(); 
jQuery( ‘#cont-1’ ).show(); 
jQuery( '. tab-link' ).click( function() { 
var _this = jQuery(this), 
_tab = _this.data( 'tab' ); 
jQuery( 'li' ).removeClass( 'active' ); 
_this.parent( 'li' ).addClass( 'active' ); 
jQuery( '.tab-content' ).hide(); 
jQuery( '#' + _tab ).show(); 
} ); 
HTML 
<ul> 
<li class=“active”><a class=“tab-link” data-tab=“ 
cont-1” href=“javascript:;”>first</a></li> 
<li><a class=“tab-link” data-tab=“cont-2” 
href=“javascript:;”>second</a></li> 
<li><a class=“tab-link” data-tab=“cont-3” 
href=“javascript:;”>third</a></li> 
</ul> 
<div id=“cont-1” class=“tab-content”> 
111</div> 
<div id=“cont-2” class=“tab-content”> 
222</div> 
<div id=“cont-3” class=“tab-content”> 
333</div>
Простой пример реализации 
табов на AngularJS и jQuery 
<div ng-app=“app” ng-controller=“ 
tabsController”> 
<ul> 
<li ng-class="{'active': activeTab == 'cont-1'}"><a 
href="javascript:;" ng-click="switchToTab('cont- 
1’)">first</a></li> 
<li ng-class="{'active': activeTab == 'cont-2'}"><a 
href="javascript:;" ng-click="switchToTab(‘cont- 
2’)">second</a></li> 
<li ng-class="{'active': activeTab == 'cont-3'}"><a 
href="javascript:;" ng-click="switchToTab(‘cont- 
3’)">second</a></li> 
</ul> 
<div ng-show="activeTab == 'cont-1'" ng-cloak> 
<div ng-show="activeTab == 'cont-2'" ng-cloak> 
<div ng-show="activeTab == 'cont-3'" ng-cloak> 
</div> 
AngularJS 
var angularApp = angular.module(‘app', []); 
angularApp.controller(‘tabsController', ['$scope', 
function($scope) { 
$scope.activeTab = ‘cont-1'; 
$scope.switchToTab = function( tab ) { 
$scope.activeTab = tab; 
} 
}]);
Некоторые «подводные камни»: 
настройка AJAX 
Настройка AJAX 
angularApp.config(['$httpProvider', function($httpProvider) { 
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; 
$httpProvider.defaults.transformRequest = function(obj) { 
var str = []; 
for(var p in obj) 
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
return str.join("&"); 
} 
}]); 
Пример AJAX в AngularJS (JSONP) 
angularApp.controller(‘controller', ['$scope', '$http', function($scope, $http) { 
$http.post( URL, { some: some } ).success( function( response ) { /*do something with response*/ } ); 
}]);
Зачем AngularJS WordPress’у? 
 Большие плагины (админка) 
 Крупные сайты на WordPress 
 Админка самого WordPress’а =)
Где искать документацию и 
помощи? 
 Google -> stackoverflow 
 https://docs.angularjs.org/guide

Mais conteúdo relacionado

Mais procurados

AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)chaykaborya
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейKonstantin Komelin
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)DrupalYug
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)Fedor Malyshkin
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерахСпособы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерахSQALab
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
Angular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей АлександровAngular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей АлександровEatDog
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...Mail.ru Group
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRAMBLER&Co
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.jsОмские ИТ-субботники
 
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Fwdays
 

Mais procurados (20)

AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерахСпособы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Angular2
Angular2Angular2
Angular2
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
Angular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей АлександровAngular vs Angular 2 vs React. Сергей Александров
Angular vs Angular 2 vs React. Сергей Александров
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...
«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Бе...
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOS
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
 

Semelhante a AngularJS. Введение и простые примеры для понимания

JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
jQuery. Введение и практика
jQuery. Введение и практикаjQuery. Введение и практика
jQuery. Введение и практикаSlava Aliev
 
KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн2ГИС Технологии
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBDataArt
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIAGetDev.NET
 
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин ИльяDUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Ильяit-people
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14MoscowJS
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 

Semelhante a AngularJS. Введение и простые примеры для понимания (20)

JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
jQuery. Введение и практика
jQuery. Введение и практикаjQuery. Введение и практика
jQuery. Введение и практика
 
KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн
 
Александр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEB
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Gwt jug basic
Gwt jug basicGwt jug basic
Gwt jug basic
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин ИльяDUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
AngularJS
AngularJSAngularJS
AngularJS
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 

AngularJS. Введение и простые примеры для понимания

  • 1. AngularJS АЛЬТЕРНАТИВА JQUERY. ВВЕДЕНИЕ И ОСНОВЫ 06.09.2014 Saint-Petersburg WordPress Meetup #2 Igor Sazonov @tigusigalpa
  • 2. План доклада  Что такое AngularJS  Область применения. Откуда такая популярность? Конкуренты  Плюсы и минусы. Чем отличается от jQuery  Архитектура AngularJS  Наглядные простейшие примеры. Что такое контроллеры  Простой пример реализации табов на AngularJS и jQuery  Некоторые «подводные камни»: настройка AJAX  Зачем AngularJS WordPress’у?  Где искать документацию и помощи?
  • 3. Что такое AngularJS?  JavaScript MVC-фреймворк от Google  URL: https://angularjs.org  Год создания: 2009  Текущая версия: 1.2.22 / 1.3.0-beta (20.08.2014)  Вес: 105кб
  • 4. Область применения. Откуда такая популярность? Конкуренты  Идеален для Single Page Application (SPA) приложений («богатое» приложение, генерирующее и изменяющее большой объем DOM’а «на лету» без перезагрузки страницы)  «Умный». Додумывает за разработчика. Например ng-show скрывает элемент, если он не удовлетворяет условию.  Код более сложный, но его в разы меньше  Никакой привязки к #id и .class для работы с элементами =)))))  Основные конкуренты: Backbone.js, KnockoutJS, ember.js
  • 5. Плюсы и минусы. Чем отличается от jQuery Плюсы  Меньше кода (иногда в разы!)  Более высокий уровень программирования  Совместим с jQuery + jqLite  Подходит для сложных SPA- приложений  Забудьте про наименование классов или #id-шников  Будущее Front-End разработки  Постоянно дорабатывается ………..Google-ом =))  Построен на watcher’ах Минусы  Сложнее в изучении  «Переадаптация» требует времени  Весит больше (105 > 83 кб)  Неочевидные решения  Постоянно дорабатывается
  • 6. Плюсы и минусы. Чем отличается от jQuery Применимость AngularJS относительно jQuery jQuery AngularJS Сложность приложения SPA
  • 7. Архитектура AngularJS Module – модуль – глобальное хранилище для Вашего приложения (контроллеры, роуты, вьюхи) Config – конфиг – настройки модуля Routes – «менеджер» контроллеров для урлов типа #/someurl Controller – контроллер – логика отдельных частей модуля (приложения) View – представление html контроллера $scope – глобальный объект (со всеми данными) контроллера Directives – кастомное поведение html Factory – фабрика (сервис)
  • 8. Наглядные простейшие примеры. Что такое контроллеры <!doctype html> <html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0- beta.19/angular.min.js"></script> </head> <body> <div> <label>Name:</label> <input type="text" ng-model="yourName" placeholder="Enter a name here"> <hr> <h1>Hello {{yourName}}!</h1> </div> </body> </html>
  • 9. Наглядные простейшие примеры. Что такое контроллеры <html ng-app="SimpleModule"> <head><meta charset="UTF-8" /><title>Простой модуль</title><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2. 23/angular.min.js"></script><script src=“simpleModule.js"></script></head> <body ng-controller="MyController"> <h1>Демо {{title}}</h1> <div><p><label for="valA">Ввведите А:</label><input type="number" id="valA" ng-model=" valA" /></p><p><label for="valB">Ввведите B:</label><input type="number" id="valB" ng-model=" valB" /></p><p>Результат: {{result}}</p><p><button ng-click=" add(valA,valB);">Сложить</button><button ng-click=" multiple(valA,valB);">Умножить</button></p></di v> </body> </html> simpleModule.js var myApp = angular.module('SimpleModule', []); myApp.controller('MyController', ['$scope', function($scope) { $scope.title = 'Простой модуль'; $scope.result = 0; $scope.add = function(a,b) { $scope.result = a + b; }; $scope.multiple = function(a,b) { $scope.result = a * b; }; }]);
  • 10. Простой пример реализации табов на AngularJS и jQuery jQuery jQuery( ‘.tab-content’ ).hide(); jQuery( ‘#cont-1’ ).show(); jQuery( '. tab-link' ).click( function() { var _this = jQuery(this), _tab = _this.data( 'tab' ); jQuery( 'li' ).removeClass( 'active' ); _this.parent( 'li' ).addClass( 'active' ); jQuery( '.tab-content' ).hide(); jQuery( '#' + _tab ).show(); } ); HTML <ul> <li class=“active”><a class=“tab-link” data-tab=“ cont-1” href=“javascript:;”>first</a></li> <li><a class=“tab-link” data-tab=“cont-2” href=“javascript:;”>second</a></li> <li><a class=“tab-link” data-tab=“cont-3” href=“javascript:;”>third</a></li> </ul> <div id=“cont-1” class=“tab-content”> 111</div> <div id=“cont-2” class=“tab-content”> 222</div> <div id=“cont-3” class=“tab-content”> 333</div>
  • 11. Простой пример реализации табов на AngularJS и jQuery <div ng-app=“app” ng-controller=“ tabsController”> <ul> <li ng-class="{'active': activeTab == 'cont-1'}"><a href="javascript:;" ng-click="switchToTab('cont- 1’)">first</a></li> <li ng-class="{'active': activeTab == 'cont-2'}"><a href="javascript:;" ng-click="switchToTab(‘cont- 2’)">second</a></li> <li ng-class="{'active': activeTab == 'cont-3'}"><a href="javascript:;" ng-click="switchToTab(‘cont- 3’)">second</a></li> </ul> <div ng-show="activeTab == 'cont-1'" ng-cloak> <div ng-show="activeTab == 'cont-2'" ng-cloak> <div ng-show="activeTab == 'cont-3'" ng-cloak> </div> AngularJS var angularApp = angular.module(‘app', []); angularApp.controller(‘tabsController', ['$scope', function($scope) { $scope.activeTab = ‘cont-1'; $scope.switchToTab = function( tab ) { $scope.activeTab = tab; } }]);
  • 12. Некоторые «подводные камни»: настройка AJAX Настройка AJAX angularApp.config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; $httpProvider.defaults.transformRequest = function(obj) { var str = []; for(var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); return str.join("&"); } }]); Пример AJAX в AngularJS (JSONP) angularApp.controller(‘controller', ['$scope', '$http', function($scope, $http) { $http.post( URL, { some: some } ).success( function( response ) { /*do something with response*/ } ); }]);
  • 13. Зачем AngularJS WordPress’у?  Большие плагины (админка)  Крупные сайты на WordPress  Админка самого WordPress’а =)
  • 14. Где искать документацию и помощи?  Google -> stackoverflow  https://docs.angularjs.org/guide