Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[Gerard Sans] New Data Architecture in Angular 2
Search
Google Developers Group Lviv
September 10, 2016
Technology
0
160
[Gerard Sans] New Data Architecture in Angular 2
Presentation from GDG DevFest Ukraine 2016.
Learn more at:
https://devfest.gdg.org.ua
Google Developers Group Lviv
September 10, 2016
Tweet
Share
More Decks by Google Developers Group Lviv
See All by Google Developers Group Lviv
[Elad Bezalel] Angular Material CDK
gdglviv
1
160
[Zac Sweers] Breaking the Android ClassLoader
gdglviv
1
240
[Daniel Galpin] Adventures in Navigation
gdglviv
2
500
[Rebecca Franks] Practical Image Processing in Android
gdglviv
1
400
[Mateusz Herych] Architecture for App Bundles
gdglviv
2
130
[Andrea Falcone] Iterative Mobile Development
gdglviv
2
100
[Yonatan Levin] Keynote: The world of change and your significance in it
gdglviv
1
140
[Denys Tkalich] Using BigQuery as a data warehouse in B2B startup
gdglviv
1
97
[Mete Atamel] Google Assistant powered by Containers, Machine Learning and .NET on Google Cloud
gdglviv
1
150
Other Decks in Technology
See All in Technology
人工衛星のファームウェアをRustで書く理由
koba789
15
7.8k
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
830
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
200
20250903_1つのAWSアカウントに複数システムがある環境におけるアクセス制御をABACで実現.pdf
yhana
3
550
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.4k
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
240
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
220
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
280
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1k
KotlinConf 2025_イベントレポート
sony
1
130
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
460
Language Update: Java
skrb
2
300
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Embracing the Ebb and Flow
colly
87
4.8k
Designing Experiences People Love
moore
142
24k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
The Pragmatic Product Professional
lauravandoore
36
6.9k
Transcript
New Data Architecture in Angular 2 by Gerard Sans |
@gerardsans
A little about me
a bit more...
- 27-28th Sept AngularConnect @AngularConnect
Angular 2
None
Features Latest Web Standards Simple Lightning fast Works everywhere
builtwithangular2.com
ES5, ES6 and TypeScript
ES5 / ES6 / TypeScript ES6 (ES2015) Classes, modules, arrow
functions TypeScript Types, annotations, generics, interfaces Great editor support
Angular 2 Tooling
Angular 2 Tooling
Bootstrapping
Bootstrapping Angular Application instantiation Root Module (AppModule) Global Dependencies Router,
Http, Services Global Values Vendor dependencies
index.html <!DOCTYPE html> <html> <head> <!-- Polyfill(s) for older browsers
--> <script src="https://unpkg.com/core-js/client/shim.min.js"></script> <script src="https://unpkg.com/
[email protected]
?main=browser"></script> <script src="https://unpkg.com/
[email protected]
"></script> <script src="https://unpkg.com/
[email protected]
/dist/system.src.js">< <script src="systemjs.config.js"></script> <script>System.import('app');</script> </head> <body> <my-app> Loading... </my-app> </body> </html>
main.ts import {platformBrowserDynamic} from '@angular/platform-browser-dyn import {AppModule} from './app'; platformBrowserDynamic().bootstrapModule(AppModule)
app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule
} from '@angular/platform-browser'; import { App } from './app.component'; @NgModule({ imports: [ BrowserModule ], declarations: [ App ], bootstrap: [ App ] }) export class AppModule {}
app.component.ts import { Component } from '@angular/core'; @Component({ selector: 'my-app',
// <my-app>Loading...</my-app> template: `...` }) export class App { constructor() { } }
Components
Components Tree source: blog
Component @Component annotation Communications Inputs, @Input Outputs, @Output Component Lifecycle
Hooks Host element interaction
Component import { Component } from '@angular/core'; @Component({ selector: 'home',
// <home></home> styles: [`h1 { color: red }`], template: `<h1>Home</h1>` }) export class Home { ... }
Lifecycle Hooks import { Component, OnChanges, OnInit, OnDestroy } from
'@angular/c @Component() export class myComponent implements OnChanges, OnInit, OnDestroy { /* 1 */ constructor() { } // called when an input or output binding changes /* 2 */ ngOnChanges(changes) { } // after child initialisation /* 3 */ ngOnInit() { } // just before is destroyed /* 4 */ ngOnDestroy() { } }
None
Templating
Template Syntax Syntax Binding type <h1>{{title}}</h1> <input [value]="firstName"> <li [class.active]="isActive"></li>
<div [style.width.px]="mySize"> Interpolation Property Class Style <button (click)="onClick($event)"> Event [(ngModel)]="data.value" Two-way
Reactive Extensions
RxJS 5
3 2 1 Stream
//Observable constructor let simple$ = Rx.Observable.create(observer => { try {
//pushing values observer.next(1); observer.next(2); observer.next(3); //complete stream observer.complete(); } catch(e) { //error handling observer.error(e); } }); Observable
Subscribe /* a$ ---1---2---3| */ let a$ = Rx.Observable.of(1,2,3); let
subscription = a$.subscribe({ next: x => console.log(x), error: x => console.log('#'), complete: () => console.log('|') });
Unsubscribe let subscription = twits$.subscribe( twit => feed.push(twit), error =>
console.log(error), () => console.log('done') ); setTimeout(() => subscription.unsubscribe(), 5000);
Example Rx.Observable.of(1) .subscribe({ next: x => console.log(x), complete: () =>
console.log('3') }); console.log('2'); // a) 1 2 3 // b) 2 1 3 // c) 1 3 2 // d) 3 2 1
None
Schedulers Observable.of(1) .subscribeOn(Rx.Scheduler.async) .subscribe({ next: (x) => console.log(x), complete: ()
=> console.log('3') }); console.log('2'); // a) 1 2 3 // b) 2 1 3 // c) 1 3 2 // d) 3 2 1
Why Observables? Flexible: sync or async Powerful operators Less code
RxJS 5 in Angular2 Asynchronous processing Http Forms: controls, validation
Component events EventEmitter
Http Module
Main Features Primary protocol for client/server communications Implements XMLHttpRequest (XHR)
and JSONP Http methods: GET, POST, PUT, DELETE, PATCH and HEAD
Creating a Http Service // app.module.ts import { HttpModule }
from '@angular/http'; @NgModule({ imports: [HttpModule], ... }) export class AppModule {}
Creating a Http Service // usersService.ts import { Injectable }
from '@angular/core'; import { Http } from '@angular/http'; @Injectable() export class UsersService { constructor(private http: Http) { } get() { return this.http.get('/assets/users.json') .map(response => response.json().users) .retryWhen(errors => errors.delay(2000)); } }
Consuming a Http Service import { Component } from '@angular/core';
import { UsersService } from '../services/usersService'; @Component({ selector: 'users', template: `<h1>Users</h1> <tr *ngFor="let user of userslist | async"> <td>{{user.username}}</td> </tr>` }) export class Users { private userslist; constructor(users: UsersService) { this.userslist = users.get(); } }
Data Architecture
Unidirectional Data Flow source: blog
Overview Data Services Components State Management (Redux) (RxJS 5) ng2-redux
ngrx/store GraphQL/Apollo Client
Дякую Thanks