Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
[Gerard Sans] New Data Architecture in Angular 2
Search
Google Developers Group Lviv
September 10, 2016
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[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
More Decks by Google Developers Group Lviv
See All by Google Developers Group Lviv
[Elad Bezalel] Angular Material CDK
gdglviv
1
180
[Zac Sweers] Breaking the Android ClassLoader
gdglviv
1
270
[Daniel Galpin] Adventures in Navigation
gdglviv
2
600
[Rebecca Franks] Practical Image Processing in Android
gdglviv
1
500
[Mateusz Herych] Architecture for App Bundles
gdglviv
2
160
[Andrea Falcone] Iterative Mobile Development
gdglviv
2
150
[Yonatan Levin] Keynote: The world of change and your significance in it
gdglviv
1
170
[Denys Tkalich] Using BigQuery as a data warehouse in B2B startup
gdglviv
1
140
[Mete Atamel] Google Assistant powered by Containers, Machine Learning and .NET on Google Cloud
gdglviv
1
190
Other Decks in Technology
See All in Technology
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
290
Bet AI Day 2026丨AIを「使う」から、AIが「働く」へ ― LayerXが進める「組織AI」の社会実装
layerx
PRO
3
2.9k
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
300
When Does a Local Qwen Start to Break
morshoto
0
190
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
4
2.7k
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
1
1.1k
enechainの内製セルフサービスプラットフォーム
hiyosi
0
150
GoにおけるFFIのこれまでとこれから
goccy
4
1.5k
omasushiというライブラリを作った
polidog
PRO
0
160
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
220
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
130
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
140
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Building Applications with DynamoDB
mza
96
7.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
450
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Skip the Path - Find Your Career Trail
mkilby
1
220
Raft: Consensus for Rubyists
vanstee
141
7.7k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
230
30 Presentation Tips
portentint
PRO
1
390
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