SlideShare a Scribd company logo
Angular 2: Всех переиграл
Евгений Жарков
DOOR3
eu.zharkov@gmail.com
@2j2e
Текущий статус
Alpha
Общий вид
@Template({
url: 'foo.html'
})
@Component({
selector: 'foo',
})
class Foo {
bar: string;
constructor() {
this.bar = 'baz';
this.bar = 2; // compiler throws an error
}
}
ToDo пример
@Template({
url: 'todos.html'
})
@Component({
selector: 'todo-app',
})
class TodoApp {
constructor() {
this.todos = ['Item1', 'Item2'];
}
}
Компоненты
@Template({
url: 'todos.html'
})
@Component({
selector: 'todo-app',
})
<todo-­‐app></todo-­‐app>
bootstrap
@Component({
selector: 'todo-app',
})
@Template({ url: 'todos.html' })
export class TodoApp {
todos;
constructor() {
this.todos = ['Item1', 'Item2'];
}
}
import {bootstrap} from 'angular';
import {TodoApp} from 'todoapp';
bootstrap(TodoApp);
План построения приложения
1.Создать модуль
2.Объявить ng-app
3.Создать контроллер
4.Закинуть данные в $scope
5.Объявить контроллер
6.Создать шаблон
1.Создать компонент
2.Создать шаблон
3.Bootstrap
4.Транспиляция
Angular 1.X Angular 2
Шаблоны
@Template({
url: 'name-change.html'
})
@Component({
selector: 'name-change',
})
class NameChange {
constructor() {
this.name = '';
}
changeName(newName) {
this.name = newName;
}
}
Шаблоны
<div> My name is {{ name }} </div>
<div>
<input #newname type="text">
<button (click)="changeName(newname.value)"
[disabled]="newname.value == 'David'">
Change Name
</button>
</div>
Локальные переменные
<div>
<input #newname type="text">
{{ newname.value }}
</div>
Обработчик событий
<div>
<input #newname type="text">
<button (click)="changeName($event, newname.value)">
</div>
Привязка данных
<div>
<input #newname type="text">
<span [textContent]="newname.value"></span>
</div>
]
Привязка данных
]
@Template({
url: 'name-change.html'
})
@Component({
selector: 'name-change',
})
class NameChange {
constructor() {
this.name = '';
}
changeName(newName) {
this.name = newName;
}
}
<div> My name is {{ name }} </div>
<div>
<input #newname type="text">
<button (click)="changeName(newname.value)"
[disabled]="newname.value == 'David'"> Change Name
</button>
</div>
Определение изменений
Формы
Это непросто
•Сложная логика
•Тестирование
•Переодически изменения
Логика
•Зависимости элементов друг от друга
•Пользователь может вводить неверные данные, в разном порядке
•Хаотичное появление ошибок
Тестирование
•Шаблоны должны компилироваться
•Это позволяет создавать множество e2e тестов
•Получаем быстрые и изолированные тесты
Изменения
•Ожидание ответа сервера
•Обработка формы при okeyup или onchange
•Изменения зависимых элементов управлений
Angular 2 Forms
- Отдельный модуль по типу модуля маршрутизации
- Не обязательный, но полезные, должен быть
Формы
- Imperative Driven
- Data Driven
- Template Driven
Формы
•Комплексная логика - обрабатываемая элементами управлениями и
валидаторами
•Тестирование - изолированная от DOM
•Обработка изменений - observable
Элементы управления
]
// create a control
var nameControl = new Control("David");
// store its value
var nameValue = nameControl.value;
// check control states
var isValid = nameControl.valid;
var hasBeenChanged = nameControl.dirty;
var hasNotBeenChanged = nameControl.pristine;
var numErrors = nameControl.errors.length;
Группа элементов управления
]
// create a control group
var group = new ControlGroup({
fullName: new Control("David East", Validators.required),
username: new Control("ng2rox", Validators.required),
favColor: new Control("")
});
Построение форм
]
// create a builder
var builder = new FormBuilder();
// build a group w/ controls
var group = builder.group({
fullName: ["David East", Validators.required],
username: ["ng2rox", Validators.required],
favColor: ["Blue"]
});
Валидаторы
]
import {bootstrap, Component, View} from 'angular2/angular2';
import {FormBuilder, Validators, FormDirectives, ControlGroup} from
'angular2/forms';
@Component({
selector: 'form-app'
})
@View({
url: 'form-app.html',
directives: [FormDirectives]
})
class FormApp {
myForm: ControlGroup;
constructor(builder: FormBuilder) {
this.myForm = builder.group({
fullName: ["", Validators.required],
username: ["", Validators.required],
favColor: [""]
});
}
}
Изолированное тестирование
]
var builder = new FormBuilder();
var app = new AppComponent(builder);
// The AppComponent is initially in an invalid state
// Assertion passes
console.assert(app.myForm.valid === false);
// Assertion fails
console.assert(app.myForm.valid === true);
Шаблоны
]
<div [control-group]="myForm">
<input [control]="myForm.controls.fullName">
</div>
Шаблоны, краткий синтаксис
]
<div [control-group]="myForm">
<!-- myForm.controls.fullName-->
<input control="fullName">
</div>
Вложенные группы
]
// create a builder
var builder = new FormBuilder();
// build a group w/ controls
var group = builder.group({
fullName: ["David East", Validators.required],
username: ["ng2rox", Validators.required],
// nested group
address: builder.group({
street: ["", Validators.required],
streetLine2: [""],
city: ["", Validators.required],
state: ["", Validators.required],
zip: ["", Validators.required]
});
});
var isValid = group.controls.address.valid; // is the address
valid?
Пример
]
<div [control-group]="myForm">
<input control="fullName">
<input control="username">
<!-- Nested Control Group -->
<div control-group="address">
<input control="street">
<input control="streetLine2">
<input control="city">
<input control="state">
<input control="zip">
</div>
</div>
Observables
]
var control = new Control();
var ref = new Firebase('https://
ngforms.firebaseio.com/control')
// Save updates to Firebase
control.valueChanges.subscribe(function(value) {
ref.set(value)
});
Angular-разработчик ждет
окончательного релиза
HAHAHA!
Wait, i don’t
get it.
Вопросы!
Система мотивации
За каждый вопрос - google наклейка
Ссылки
- Angular 2 Forms
- Forms in Angular 2
- Change Detection in Angular 2 (Victor Savkin)
- Angular2 - First Impressions (Minko Gechev)
- An Angular2 Todo App: First look at App Development in Angular2

More Related Content

PPT
Где кончается react native? / Павел Кондратенко (Rambler&Co)
PPTX
Selenium: начало работы
PDF
Превышаем скоростные лимиты с Angular 2
PPTX
XPath локаторы в Selenium WebDriver
PDF
Превышаем скоросные лимиты с Angular 2
PPT
Модульное тестирование iOS-приложений.
PPTX
Selenium: приемы работы
PDF
Пользователь точно оценит! Повышение производительности мобильных приложений ...
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Selenium: начало работы
Превышаем скоростные лимиты с Angular 2
XPath локаторы в Selenium WebDriver
Превышаем скоросные лимиты с Angular 2
Модульное тестирование iOS-приложений.
Selenium: приемы работы
Пользователь точно оценит! Повышение производительности мобильных приложений ...

What's hot (19)

PPTX
Unit тестирование
PDF
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PDF
Контейнер сервисов
PDF
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
PPTX
Angular 2 vs Angular 1
PDF
STABILITY IN UNSTABILITY SELF-HEALING TEST AUTOMATION
PDF
Антон Веретенников и Илья Семаков. Презентация
PDF
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
PPTX
Selenium vs AJAX
PDF
Тестируй это / Виктор Русакович (GP Solutions)
PDF
Pycon Russia 2013 - Разработка через тестирование в Python и Django
PPT
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
PPTX
Особенности разработки API / Всеволод Шмыров (Яндекс)
PPT
Руководство по приготовлению бутербродов из Selenium
PDF
Vuejs composition API
PDF
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
PPT
Alexander manuhin selenium_php_v2.0
PDF
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
Unit тестирование
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Автоматизация UI тестирования под Windows и Windows Phone
Контейнер сервисов
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»
Angular 2 vs Angular 1
STABILITY IN UNSTABILITY SELF-HEALING TEST AUTOMATION
Антон Веретенников и Илья Семаков. Презентация
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
Selenium vs AJAX
Тестируй это / Виктор Русакович (GP Solutions)
Pycon Russia 2013 - Разработка через тестирование в Python и Django
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
Особенности разработки API / Всеволод Шмыров (Яндекс)
Руководство по приготовлению бутербродов из Selenium
Vuejs composition API
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Alexander manuhin selenium_php_v2.0
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
Ad

Viewers also liked (19)

PDF
Roslyn compiler as a service
PPTX
Silverlight 4, есть ли жизнь на десктопе?
PPTX
Silverlight 5
PPTX
Кластеризация в OpenSource. Часть 1-я — отказоустойчивые системы
PPTX
Tarea motivacional metodología
PPTX
Kinecting people
PDF
Mobile applications in a new way with React Native
PPTX
Big Bang Theory of JavaScript Metro Applications
PPTX
Windows 8 app java script dark side
PDF
Как объяснить на платьях процесс разработки?
PDF
Cycle.js: Functional and Reactive
PDF
Creating windows store java script apps
PPT
5.thuế đánh vào tiết kiệm
PPT
4.thuế đánh vào cung lao động
PDF
Angular 2.0: Brighter future?
PDF
SignalR: Add real-time to your applications
PPT
3.thuế hiệu quả và thuế tối ưu
PPT
1. phân tích lý thuyết thuế tổng quan 0
PDF
Switch to React.js from AngularJS developer
Roslyn compiler as a service
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 5
Кластеризация в OpenSource. Часть 1-я — отказоустойчивые системы
Tarea motivacional metodología
Kinecting people
Mobile applications in a new way with React Native
Big Bang Theory of JavaScript Metro Applications
Windows 8 app java script dark side
Как объяснить на платьях процесс разработки?
Cycle.js: Functional and Reactive
Creating windows store java script apps
5.thuế đánh vào tiết kiệm
4.thuế đánh vào cung lao động
Angular 2.0: Brighter future?
SignalR: Add real-time to your applications
3.thuế hiệu quả và thuế tối ưu
1. phân tích lý thuyết thuế tổng quan 0
Switch to React.js from AngularJS developer
Ad

Similar to Angular 2: Всех переиграл (20)

PDF
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
PDF
Mobile automation uamobile
PPTX
iOS and Android Mobile Test Automation
PDF
Экскурсия по Flutter SDK
PDF
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
PDF
Making Scalable JavaScript Application
PDF
YiiConf: Миграции и инсталляции
PDF
Yii: миграции и инсталляции
PPT
паттерны программирования
PDF
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
PDF
SECON'2016. Приходько Артём, Модульное JavaScript приложение
PDF
Erlang tasty & useful stuff
PPT
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
PDF
Zend Framework и Doctrine
PDF
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
PPTX
PPTX
Yii2
PDF
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
PDF
Разработка через тестирование в Python и Django #pyconru
PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Mobile automation uamobile
iOS and Android Mobile Test Automation
Экскурсия по Flutter SDK
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
Making Scalable JavaScript Application
YiiConf: Миграции и инсталляции
Yii: миграции и инсталляции
паттерны программирования
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
SECON'2016. Приходько Артём, Модульное JavaScript приложение
Erlang tasty & useful stuff
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
Zend Framework и Doctrine
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Yii2
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Разработка через тестирование в Python и Django #pyconru
"CommonJS для браузера", Антон Шувалов, MoscowJS 15

More from Eugene Zharkov (15)

PDF
Monorepo: React + React Native. React Alicante
PDF
Monorepo: React Web & React Native
PDF
Create React Native App vs Expo vs Manually
PDF
Build automation with Fastlane
PDF
GraphQL and/or REST
PDF
React Native Animation
PDF
React Native: Hurdle Race
PDF
Burn your grass with react native
PDF
Фронтенд сказки
PDF
How to be a good frontend developer
PDF
Что там в summary
PDF
Elm: give it a try
PDF
AngularJS: Good parts
PDF
Angular.JS: Do it right
PPTX
WinRT Holy COw
Monorepo: React + React Native. React Alicante
Monorepo: React Web & React Native
Create React Native App vs Expo vs Manually
Build automation with Fastlane
GraphQL and/or REST
React Native Animation
React Native: Hurdle Race
Burn your grass with react native
Фронтенд сказки
How to be a good frontend developer
Что там в summary
Elm: give it a try
AngularJS: Good parts
Angular.JS: Do it right
WinRT Holy COw

Angular 2: Всех переиграл