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

PDF
Превышаем скоростные лимиты с Angular 2
PDF
Превышаем скоросные лимиты с Angular 2
PDF
Angular 2: Всех переиграл
PPT
Где кончается react native? / Павел Кондратенко (Rambler&Co)
PDF
Пользователь точно оценит! Повышение производительности мобильных приложений ...
PDF
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
PPTX
Selenium: начало работы
PPTX
Angular 2 vs Angular 1
Превышаем скоростные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2
Angular 2: Всех переиграл
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Пользователь точно оценит! Повышение производительности мобильных приложений ...
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"
Selenium: начало работы
Angular 2 vs Angular 1

What's hot (20)

PDF
«Как перестать отлаживать асинхронные вызовы и начать жить»​
PPTX
XPath локаторы в Selenium WebDriver
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PPT
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
PDF
Контроль качества верстки или как начать делать Makeup
PDF
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
PPTX
Selenium: приемы работы
PDF
Rambler.iOS #5: Генерамба и прочие аспекты кодогенерации в VIPER
PPTX
Практика использования Dependency Injection
PDF
Тестируй это / Виктор Русакович (GP Solutions)
PPTX
Особенности разработки API / Всеволод Шмыров (Яндекс)
PDF
Behat в PHP с использованием Behat и Mink
PDF
Component Inspector
PDF
Vuejs composition API
PPT
Модульное тестирование iOS-приложений.
PPTX
Unit тестирование
PDF
Эволюционный дизайн. Joker Students Day 2016
PPTX
Selenium vs AJAX
PPT
Alexander manuhin selenium_php_v2.0
PDF
Java 9: what is there beyond modularization
«Как перестать отлаживать асинхронные вызовы и начать жить»​
XPath локаторы в Selenium WebDriver
Автоматизация UI тестирования под Windows и Windows Phone
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
Контроль качества верстки или как начать делать Makeup
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
Selenium: приемы работы
Rambler.iOS #5: Генерамба и прочие аспекты кодогенерации в VIPER
Практика использования Dependency Injection
Тестируй это / Виктор Русакович (GP Solutions)
Особенности разработки API / Всеволод Шмыров (Яндекс)
Behat в PHP с использованием Behat и Mink
Component Inspector
Vuejs composition API
Модульное тестирование iOS-приложений.
Unit тестирование
Эволюционный дизайн. Joker Students Day 2016
Selenium vs AJAX
Alexander manuhin selenium_php_v2.0
Java 9: what is there beyond modularization
Ad

Viewers also liked (20)

PPTX
Angular vs Angular 2 vs React. Сергей Александров
PDF
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
PDF
Angular2
PDF
Angular 2 vs React
PDF
#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...
PDF
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
PDF
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)
PPTX
AngularJS. Введение и простые примеры для понимания
PDF
ReactJS or Angular
PDF
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
PDF
ReactJS vs AngularJS - Head to Head comparison
PDF
Андрей Уманский и Дмитрий Горин "Нет скучным ретроспективам! Создаём эффектив...
PDF
Александр Корниенко "Как реально построить Dream-team?"
PPT
"От разработчика в консультанты - история одного тренера" Александр Баглай
PDF
"Посмотрим на Акку-Джаву" Дмитрий Мантула
PDF
Максим Климишин "Борьба с асинхронностью в JS"
PPTX
"Walk in a distributed systems park with Orleans" Евгений Бобров
PDF
Алексей Демедецкий | Unit testing in swift
PDF
Ruby w/o Rails (Олександр Сімонов)
PDF
"Backbone React Flux" Артем Тритяк
Angular vs Angular 2 vs React. Сергей Александров
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular2
Angular 2 vs React
#10 "Опыт создания Real-time игры на WebGL, Angular, Socket.io и Node.js" Его...
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Сайт Москвы за 6 месяцев / Игорь Цупко (Notamedia)
AngularJS. Введение и простые примеры для понимания
ReactJS or Angular
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
ReactJS vs AngularJS - Head to Head comparison
Андрей Уманский и Дмитрий Горин "Нет скучным ретроспективам! Создаём эффектив...
Александр Корниенко "Как реально построить Dream-team?"
"От разработчика в консультанты - история одного тренера" Александр Баглай
"Посмотрим на Акку-Джаву" Дмитрий Мантула
Максим Климишин "Борьба с асинхронностью в JS"
"Walk in a distributed systems park with Orleans" Евгений Бобров
Алексей Демедецкий | Unit testing in swift
Ruby w/o Rails (Олександр Сімонов)
"Backbone React Flux" Артем Тритяк
Ad

More from Fwdays (20)

PDF
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
PDF
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
PPTX
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
PPTX
"Як ми переписали Сільпо на Angular", Євген Русаков
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
PDF
"Validation and Observability of AI Agents", Oleksandr Denisyuk
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
PPTX
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
PPTX
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
PDF
"AI is already here. What will happen to your team (and your role) tomorrow?"...
PPTX
"Is it worth investing in AI in 2025?", Alexander Sharko
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
PDF
"Scaling in space and time with Temporal", Andriy Lupa .pdf
PPTX
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
PPTX
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
PPTX
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
"Як ми переписали Сільпо на Angular", Євген Русаков
"AI Transformation: Directions and Challenges", Pavlo Shaternik
"Validation and Observability of AI Agents", Oleksandr Denisyuk
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
"AI is already here. What will happen to your team (and your role) tomorrow?"...
"Is it worth investing in AI in 2025?", Alexander Sharko
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Database isolation: how we deal with hundreds of direct connections to the d...
"Scaling in space and time with Temporal", Andriy Lupa .pdf
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...

"Angular 2: Всех переиграл" Евгений Жарков