SlideShare a Scribd company logo
Angular 2 vs. Angular 1
О ключевых отличиях, разнице в архитектуре, и конечно о typescript
Vlad Pozdnyakov
@Comodo
Архитектура Angular 1.x приложения
Module
ControllerService Factory View Directives
Constants
Filters
etc.
Объявление модуля в Angular 1.x
// Declare app level module which depends on views, and components
var phonecatApp = angular.module('phonecatApp', ['ngRoute', 'ngResource']);
phonecatApp.controller('PhoneDetailController', ['$scope', '$http', '$location', '$routeParams', 'Phone', function ($scope, $http,
$location, $routeParams, Phone) {
$scope.phoneId = $routeParams.phoneId;
Phone.get({
phoneId: $scope.phoneId
}, function (data) {
$scope.phone = data;
$scope.mainImageUrl = data.images[0];
});
}]);
Фабрики и сервисы в Angular 1.x
angular.module('myApp.home', ['ngRoute',
'firebase'])
.factory('CommonProp', function () {
var user = '';
return {
getUser: function () {
return user;
},
setUser: function (value) {
user = value;
}
};
});
angular.module('myApp.home', ['ngRoute',
'firebase'])
.service('CommonProp', function () {
var user = '';
this.getUser = function () {
return user;
};
this.setUser = function (value) {
user = value;
};
});
А в чем разница?
Фабрики и сервисы в Angular 1.x
Фабрика это сервис, который может вернуть любой тип данных. Она не
содержит правил по созданию этих данных.
Сервис (не путайте общее название с конкретным типом) работает так же
как фабрика. Разница в том, что сервис использует конструктор, поэтому,
когда используете его в первый раз, он выполнит new Foo(); для создания
экземпляра объекта.
© какой-то чувак с Хабра
Что насчет Angular 2?
Поговорим о TypeScript
+ Модификаторы доступа (private, protected, public)
+ Интерфейсы
+ Абстрактные классы
+ Поддержка JS библиотек (type definitions)
Классы и интерфейсы
export class Hero {
id: number;
name: string;
}
/**
* Реализация с помощью интерфейса
*/
interface IHero {
id: number;
name: string;
}
export class Hero implements IHero {
id:number;
name:string;
}
Архитектура Angular 2 приложения
Module
Metadata +
Components
Service View
Точка входа в Angular 2 приложении
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule,
InMemoryWebApiModule.forRoot(InMemoryDataService)
],
declarations: [
AppComponent,
DashboardComponent,
HeroesComponent,
HeroDetailComponent,
HeroSearchComponent
],
providers: [ HeroService ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
@NgModule
● imports - подключаем другие модули как зависимости
● declarations - классы, которые мы используем в модуле (компоненты, директивы и т.д.)
● providers - сервисы, доступные во всем приложении
● bootstrap - точка входа (Root component)
● exports - экспорт компонентов, для доступа в других модулях
Главный компонент приложения
@Component({
moduleId: module.id,
selector: 'my-app',
template: `
<h1>{{title}}</h1>
<nav>
<a routerLink="/dashboard" routerLinkActive="active">Dashboard</a>
<a routerLink="/heroes" routerLinkActive="active">Heroes</a>
</nav>
<router-outlet></router-outlet>
`,
styleUrls: ['app.component.css']
})
export class AppComponent {
title = 'Tour of Heroes';
}
Компонент приложения
@Component({
moduleId: module.id,
selector: 'my-heroes',
templateUrl: 'heroes.component.html',
styleUrls: ['heroes.component.css'],
providers: [HeroService]
})
export class HeroesComponent implements OnInit{
heroes: Hero[];
selectedHero: Hero;
constructor(private router: Router, private heroService: HeroService) {}
ngOnInit():void {...}
onSelect(hero: Hero): void {...}
getHeroes(): void {...}
gotoDetail(): void {...}
add(name: string): void {...}
delete(hero: Hero): void {...}
}
@Component
● moduleId - устанавливает источник базового адреса
● selector - CSS селектор, для вставки компонента в шаблон
● templateUrl - путь к файлу шаблона (HTML)
● styleUrls - массив путей к файлам стилей (CSS)
● providers - массив с зависимостями для компонента
Directives
● Structural - изменяют макет путем изменения DOM
<li *ngFor="let hero of heroes"></li>
● Attribute - изменяют внешний вид или поведение элемента
<input [(ngModel)]="hero.name">
Сервисы
@Injectable()
export class HeroService {
private heroesUrl = 'app/heroes';
private headers = new Headers({'Content-Type': 'application/json'});
constructor(private http: Http) {}
getHeroes(): Promise<Hero[]> {...}
getHero(id:number): Promise<Hero> {...}
private handleError(error: any): Promise<any> {...}
update(hero: Hero): Promise<Hero> {...}
create(name:string): Promise<Hero> {...}
delete(id:number): Promise<void> {...}
}
Итоги сравнения
● Версии не совместимы. Для перевода проекта на Angular 2 придется переписывать все
● Другая архитектура - переход к компонентному подходу
● Активно используем Typescript вместе с ES6 (JS версия написана без ES6)
Thank you
Vlad Pozdnyakov
@scary_donetskiy
http://vados.pro
Ad

More Related Content

What's hot (20)

Rambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и Swift
RAMBLER&Co
 
Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)
65apps
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Ontico
 
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.КассыRambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
RAMBLER&Co
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
Омские ИТ-субботники
 
Viper architecture
Viper architectureViper architecture
Viper architecture
Katerina Korovkina
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Глеб Тарасов
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
Oleksii Okhrymenko
 
Rambler.iOS #5: Переходы и передача данных между VIPER модулями
Rambler.iOS #5: Переходы и передача данных между VIPER модулямиRambler.iOS #5: Переходы и передача данных между VIPER модулями
Rambler.iOS #5: Переходы и передача данных между VIPER модулями
RAMBLER&Co
 
Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2
Oleksii Okhrymenko
 
Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014
Andrey Listochkin
 
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QAFest
 
#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман Сальников#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман Сальников
JSib
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
Лагуновский Иван
 
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиямSECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
Конференция разработчиков программного обеспечения SECON'2014
 
Unit тестирование
Unit тестированиеUnit тестирование
Unit тестирование
Павел Тявин
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
Elogic Magento Development
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
Paul Stashevsky
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Ontico
 
Rambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и Swift
RAMBLER&Co
 
Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)
65apps
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Ontico
 
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.КассыRambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
Rambler.iOS #4: Создание модульных приложений на примере Рамблер.Кассы
RAMBLER&Co
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
Омские ИТ-субботники
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Глеб Тарасов
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
Oleksii Okhrymenko
 
Rambler.iOS #5: Переходы и передача данных между VIPER модулями
Rambler.iOS #5: Переходы и передача данных между VIPER модулямиRambler.iOS #5: Переходы и передача данных между VIPER модулями
Rambler.iOS #5: Переходы и передача данных между VIPER модулями
RAMBLER&Co
 
Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2
Oleksii Okhrymenko
 
Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014
Andrey Listochkin
 
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QAFest
 
#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман Сальников#13 "Управление состоянием в Redux" Роман Сальников
#13 "Управление состоянием в Redux" Роман Сальников
JSib
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
Paul Stashevsky
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Ontico
 

Viewers also liked (20)

Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
Knoldus Inc.
 
Angular 2 - Better or worse
Angular 2 - Better or worseAngular 2 - Better or worse
Angular 2 - Better or worse
Vladimir Georgiev
 
Angular1&2
Angular1&2Angular1&2
Angular1&2
Kenichi Kanai
 
How to Upgrade Angular 1 to Angular 2 - Piece by Piece
How to Upgrade Angular 1 to Angular 2 - Piece by Piece How to Upgrade Angular 1 to Angular 2 - Piece by Piece
How to Upgrade Angular 1 to Angular 2 - Piece by Piece
Christopher T. Walrath
 
Data models in Angular 1 & 2
Data models in Angular 1 & 2Data models in Angular 1 & 2
Data models in Angular 1 & 2
Adam Klein
 
Migrating an Application from Angular 1 to Angular 2
Migrating an Application from Angular 1 to Angular 2 Migrating an Application from Angular 1 to Angular 2
Migrating an Application from Angular 1 to Angular 2
Ross Dederer
 
Angular 1.x vs 2 - In code level
Angular 1.x vs 2 - In code levelAngular 1.x vs 2 - In code level
Angular 1.x vs 2 - In code level
Anuradha Bandara
 
Angular 2 overview
Angular 2 overviewAngular 2 overview
Angular 2 overview
Jesse Warden
 
Getting Started with Angular 2
Getting Started with Angular 2Getting Started with Angular 2
Getting Started with Angular 2
FITC
 
Angular 2 KTS
Angular 2 KTSAngular 2 KTS
Angular 2 KTS
John Vall
 
Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Building Universal Applications with Angular 2
Building Universal Applications with Angular 2
Minko Gechev
 
Angular 1.x in action now
Angular 1.x in action nowAngular 1.x in action now
Angular 1.x in action now
GDG Odessa
 
Release Engineering
Release EngineeringRelease Engineering
Release Engineering
GDG Odessa
 
BDSM or start programming after Angular one
BDSM or start programming after Angular oneBDSM or start programming after Angular one
BDSM or start programming after Angular one
GDG Odessa
 
New World of Angular (v2+)
New World of Angular (v2+)New World of Angular (v2+)
New World of Angular (v2+)
Rahat Khanna a.k.a mAppMechanic
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium Versusmind
Philippe Didiergeorges
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for Beginners
Oswald Campesato
 
Space survival game
Space survival gameSpace survival game
Space survival game
Ross
 
Introduction to Angular JS
Introduction to Angular JSIntroduction to Angular JS
Introduction to Angular JS
Santhosh Kumar Srinivasan
 
Building single page applications with angular.js
Building single page applications with angular.jsBuilding single page applications with angular.js
Building single page applications with angular.js
Dieter De Mesmaeker
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
Knoldus Inc.
 
How to Upgrade Angular 1 to Angular 2 - Piece by Piece
How to Upgrade Angular 1 to Angular 2 - Piece by Piece How to Upgrade Angular 1 to Angular 2 - Piece by Piece
How to Upgrade Angular 1 to Angular 2 - Piece by Piece
Christopher T. Walrath
 
Data models in Angular 1 & 2
Data models in Angular 1 & 2Data models in Angular 1 & 2
Data models in Angular 1 & 2
Adam Klein
 
Migrating an Application from Angular 1 to Angular 2
Migrating an Application from Angular 1 to Angular 2 Migrating an Application from Angular 1 to Angular 2
Migrating an Application from Angular 1 to Angular 2
Ross Dederer
 
Angular 1.x vs 2 - In code level
Angular 1.x vs 2 - In code levelAngular 1.x vs 2 - In code level
Angular 1.x vs 2 - In code level
Anuradha Bandara
 
Angular 2 overview
Angular 2 overviewAngular 2 overview
Angular 2 overview
Jesse Warden
 
Getting Started with Angular 2
Getting Started with Angular 2Getting Started with Angular 2
Getting Started with Angular 2
FITC
 
Angular 2 KTS
Angular 2 KTSAngular 2 KTS
Angular 2 KTS
John Vall
 
Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Building Universal Applications with Angular 2
Building Universal Applications with Angular 2
Minko Gechev
 
Angular 1.x in action now
Angular 1.x in action nowAngular 1.x in action now
Angular 1.x in action now
GDG Odessa
 
Release Engineering
Release EngineeringRelease Engineering
Release Engineering
GDG Odessa
 
BDSM or start programming after Angular one
BDSM or start programming after Angular oneBDSM or start programming after Angular one
BDSM or start programming after Angular one
GDG Odessa
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium Versusmind
Philippe Didiergeorges
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for Beginners
Oswald Campesato
 
Space survival game
Space survival gameSpace survival game
Space survival game
Ross
 
Building single page applications with angular.js
Building single page applications with angular.jsBuilding single page applications with angular.js
Building single page applications with angular.js
Dieter De Mesmaeker
 
Ad

Similar to Angular 2 vs Angular 1 (20)

Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
DataArt
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Ontico
 
"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений Жарков"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений Жарков
Fwdays
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
Andrii Dzynia
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android
Madina Kamzina
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
Dmytro Chyzhykov
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для понимания
Igor Sazonov
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
RoboGuice
RoboGuiceRoboGuice
RoboGuice
Alexander Shaubert
 
Angular js
Angular jsAngular js
Angular js
The NGO Development Center
 
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JSFestUA
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf Conference
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
DataArt
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Ontico
 
"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений Жарков"Angular 2: Всех переиграл" Евгений Жарков
"Angular 2: Всех переиграл" Евгений Жарков
Fwdays
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
Andrii Dzynia
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android
Madina Kamzina
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для понимания
Igor Sazonov
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JSFestUA
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf Conference
 
Ad

More from GDG Odessa (6)

Rx android
Rx androidRx android
Rx android
GDG Odessa
 
Kotlin
KotlinKotlin
Kotlin
GDG Odessa
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on Android
GDG Odessa
 
Понимая Git /git/. Git изнутри наружу
Понимая Git /git/. Git изнутри наружуПонимая Git /git/. Git изнутри наружу
Понимая Git /git/. Git изнутри наружу
GDG Odessa
 
Жизненный цикл React приложений
Жизненный цикл React приложенийЖизненный цикл React приложений
Жизненный цикл React приложений
GDG Odessa
 
React + Redux. Опыт использования
React + Redux. Опыт использованияReact + Redux. Опыт использования
React + Redux. Опыт использования
GDG Odessa
 
Clean architecture on Android
Clean architecture on AndroidClean architecture on Android
Clean architecture on Android
GDG Odessa
 
Понимая Git /git/. Git изнутри наружу
Понимая Git /git/. Git изнутри наружуПонимая Git /git/. Git изнутри наружу
Понимая Git /git/. Git изнутри наружу
GDG Odessa
 
Жизненный цикл React приложений
Жизненный цикл React приложенийЖизненный цикл React приложений
Жизненный цикл React приложений
GDG Odessa
 
React + Redux. Опыт использования
React + Redux. Опыт использованияReact + Redux. Опыт использования
React + Redux. Опыт использования
GDG Odessa
 

Angular 2 vs Angular 1

  • 1. Angular 2 vs. Angular 1 О ключевых отличиях, разнице в архитектуре, и конечно о typescript Vlad Pozdnyakov @Comodo
  • 2. Архитектура Angular 1.x приложения Module ControllerService Factory View Directives Constants Filters etc.
  • 3. Объявление модуля в Angular 1.x // Declare app level module which depends on views, and components var phonecatApp = angular.module('phonecatApp', ['ngRoute', 'ngResource']); phonecatApp.controller('PhoneDetailController', ['$scope', '$http', '$location', '$routeParams', 'Phone', function ($scope, $http, $location, $routeParams, Phone) { $scope.phoneId = $routeParams.phoneId; Phone.get({ phoneId: $scope.phoneId }, function (data) { $scope.phone = data; $scope.mainImageUrl = data.images[0]; }); }]);
  • 4. Фабрики и сервисы в Angular 1.x angular.module('myApp.home', ['ngRoute', 'firebase']) .factory('CommonProp', function () { var user = ''; return { getUser: function () { return user; }, setUser: function (value) { user = value; } }; }); angular.module('myApp.home', ['ngRoute', 'firebase']) .service('CommonProp', function () { var user = ''; this.getUser = function () { return user; }; this.setUser = function (value) { user = value; }; }); А в чем разница?
  • 5. Фабрики и сервисы в Angular 1.x Фабрика это сервис, который может вернуть любой тип данных. Она не содержит правил по созданию этих данных. Сервис (не путайте общее название с конкретным типом) работает так же как фабрика. Разница в том, что сервис использует конструктор, поэтому, когда используете его в первый раз, он выполнит new Foo(); для создания экземпляра объекта. © какой-то чувак с Хабра
  • 7. Поговорим о TypeScript + Модификаторы доступа (private, protected, public) + Интерфейсы + Абстрактные классы + Поддержка JS библиотек (type definitions)
  • 8. Классы и интерфейсы export class Hero { id: number; name: string; } /** * Реализация с помощью интерфейса */ interface IHero { id: number; name: string; } export class Hero implements IHero { id:number; name:string; }
  • 9. Архитектура Angular 2 приложения Module Metadata + Components Service View
  • 10. Точка входа в Angular 2 приложении @NgModule({ imports: [ BrowserModule, FormsModule, HttpModule, AppRoutingModule, InMemoryWebApiModule.forRoot(InMemoryDataService) ], declarations: [ AppComponent, DashboardComponent, HeroesComponent, HeroDetailComponent, HeroSearchComponent ], providers: [ HeroService ], bootstrap: [ AppComponent ] }) export class AppModule { }
  • 11. @NgModule ● imports - подключаем другие модули как зависимости ● declarations - классы, которые мы используем в модуле (компоненты, директивы и т.д.) ● providers - сервисы, доступные во всем приложении ● bootstrap - точка входа (Root component) ● exports - экспорт компонентов, для доступа в других модулях
  • 12. Главный компонент приложения @Component({ moduleId: module.id, selector: 'my-app', template: ` <h1>{{title}}</h1> <nav> <a routerLink="/dashboard" routerLinkActive="active">Dashboard</a> <a routerLink="/heroes" routerLinkActive="active">Heroes</a> </nav> <router-outlet></router-outlet> `, styleUrls: ['app.component.css'] }) export class AppComponent { title = 'Tour of Heroes'; }
  • 13. Компонент приложения @Component({ moduleId: module.id, selector: 'my-heroes', templateUrl: 'heroes.component.html', styleUrls: ['heroes.component.css'], providers: [HeroService] }) export class HeroesComponent implements OnInit{ heroes: Hero[]; selectedHero: Hero; constructor(private router: Router, private heroService: HeroService) {} ngOnInit():void {...} onSelect(hero: Hero): void {...} getHeroes(): void {...} gotoDetail(): void {...} add(name: string): void {...} delete(hero: Hero): void {...} }
  • 14. @Component ● moduleId - устанавливает источник базового адреса ● selector - CSS селектор, для вставки компонента в шаблон ● templateUrl - путь к файлу шаблона (HTML) ● styleUrls - массив путей к файлам стилей (CSS) ● providers - массив с зависимостями для компонента
  • 15. Directives ● Structural - изменяют макет путем изменения DOM <li *ngFor="let hero of heroes"></li> ● Attribute - изменяют внешний вид или поведение элемента <input [(ngModel)]="hero.name">
  • 16. Сервисы @Injectable() export class HeroService { private heroesUrl = 'app/heroes'; private headers = new Headers({'Content-Type': 'application/json'}); constructor(private http: Http) {} getHeroes(): Promise<Hero[]> {...} getHero(id:number): Promise<Hero> {...} private handleError(error: any): Promise<any> {...} update(hero: Hero): Promise<Hero> {...} create(name:string): Promise<Hero> {...} delete(id:number): Promise<void> {...} }
  • 17. Итоги сравнения ● Версии не совместимы. Для перевода проекта на Angular 2 придется переписывать все ● Другая архитектура - переход к компонентному подходу ● Активно используем Typescript вместе с ES6 (JS версия написана без ES6)
  翻译: