Angular Fundamentals
Babel Coder
Components
“A component controls a patch of screen real estate that we could call a view,
and
declares reusable UI building blocks for an application.”
Babel Coder
Components
import { Component } from '@angular/core';
@Component({
selector: 'app-hello',
template: ` <p>Hello {{name}}</p> `
})
export class Hello {
name: string;
constructor() {
this.name = 'World';
}
}
Metadata Hello World
Babel Coder
Components
Note List
Note#3
Note#2
Note#1 Note#4
NoteForm
Note#1
Note#2
Note#3
Note#4
Add
Notes
App
Babel Coder
Component Glosary
Bootstrap Process
Root Module
Declarations
BrowserModule
Components
Selectors
Templates
Interpolation
Input / Output and Event Handling
Event Binding and Property Binding
Safe Navigation Operator
Babel Coder
Lifecycle Hooks
lifecycle
ngOnChanges
ngOnInit
ngDoCheck
ngAfterContentInit
ngAfterContentChecked
ngAfterViewInit
ngAfterViewChecked
ngOnDestroy
Babel Coder
Lifecycle Hooks
ngOnChanges
ngOnInit
ngOnChanges
set data-bound input propertirs
After first displays and sets the component's
input properties
reset data-bound input propertirs
Babel Coder
ngOnInit
import { OnInit } from '@angular/core';
export class OnInitComponent implements OnInit {
constructor() {
// fetch API
}
ngOnInit() {
// fetch API
}
}
Babel Coder
ngOnChanges
import { OnChanges, SimpleChanges } from '@angular/core';
export class OnChangesComponent implements OnChanges {
constructor() {
}
ngOnChanges(changes: SimpleChanges) {
}
}
Babel Coder
Directives
Directives DOM DOM
+
A Directive modifies the DOM to change apperance, behavior or layout of DOM elements.
Babel Coder
Directives
Component: Directives + Template
Structural Directives: Change the Dom Layout
Attribute Directives: Change the appearance or behavior
Babel Coder
structural directives
NgFor
NgIf
NgSwitch
Babel Coder
ngFor
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<div *ngFor="let course of courses">
{{ course.title }} - {{ course.price }} Baht
</div>
`
})
export class AppComponent {
courses = [
{ title: 'Universal Angular2', price: 7500 },
{ title: 'Advance JavaScript', price: 7500 },
{ title: 'Fullstack JavaScript', price: 7500 }
]
}
Universal Angular2 - 7500 Baht
Advance JavaScript - 7500 Baht
Fullstack JavaScript - 7500 Baht
ngFor
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
@for (course of courses; track course.title) {
<div>
{{ course.title }} - {{ course.price }} Baht
</div>
}
`
})
export class AppComponent {
courses = [
{ title: 'Universal Angular2', price: 7500 },
{ title: 'Advance JavaScript', price: 7500 },
{ title: 'Fullstack JavaScript', price: 7500 }
]
}
Universal Angular2 - 7500 Baht
Advance JavaScript - 7500 Baht
Fullstack JavaScript - 7500 Baht
ngIf
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<div *ngFor="let course of courses">
<div *ngIf="course.price <= 3000">
{{ course.title }} - {{ course.price }} Baht
</div>
</div>
`
})
export class AppComponent {
courses = [
{ title: 'Universal Angular2', price: 7500 },
{ title: 'Advance JavaScript', price: 7500 },
{ title: 'Fullstack JavaScript', price: 7500 },
{ title: 'Instant Angular2', price: 2950 },
]
} Instant Angular2 - 2950 Baht
ngIf
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
@for (course of courses; track course.title) {
@if (course.price <= 3000) {
<div>{{ course.title }} - {{ course.price }} Baht</div>
}
}
`
})
export class AppComponent {
courses = [
{ title: 'Universal Angular2', price: 7500 },
{ title: 'Advance JavaScript', price: 7500 },
{ title: 'Fullstack JavaScript', price: 7500 },
{ title: 'Instant Angular2', price: 2950 },
]
} Instant Angular2 - 2950 Baht
ngSwitch
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<div *ngIf="currentView === 'SHOW'">Show View</div>
<div *ngIf="currentView === 'EDIT'">Edit View</div>
<div *ngIf="currentView === 'CREATE'">Create View</div>
<div *ngIf="currentView !== 'SHOW' && currentView !== 'EDIT' && currentView
!== 'CREATE'">
Landing Page
</div> `
})
export class AppComponent {
currentView = 'SHOW';
}
Babel Coder
ngSwitch
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<div [ngSwitch]="currentView">
<div *ngSwitchCase="'SHOW'">Show View</div>
<div *ngSwitchCase="'EDIT'">Edit View</div>
<div *ngSwitchCase="'CREATE'">Create View</div>
<div *ngSwitchDefault>Landing Page</div>
</div>
`
})
export class AppComponent {
currentView = 'SHOW';
} Show View
ngSwitch
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<div>
@switch (currentView) {
@case ('SHOW') {
<div>Show View</div>
}
@case ('EDIT') {
<div>Edit View</div>
}
@case ('CREATE') {
<div>Create View</div>
}
@default {
<div>Landing Page</div>
}
}
</div>
`
})
export class AppComponent {
currentView = 'SHOW';
}
Show View
Attribute Directives
NgStyle
NgClass
Babel Coder
ngStyle
@Component({
selector: 'bold-button',
template: `
<button [ngStyle]="{
color: color,
'background-color': bgColor,
fontWeight: 'bold'
}">
<ng-content></ng-content>
</button>
`
})
export class DeleteButtonComponent {
@Input() bgColor: string = 'red';
@Input() color: string = 'white';
}
@Component({
selector: 'app-root',
template: `
<bold-button bgColor="green">
Delete
</bold-button>
`
})
export class AppComponent { }
Delete
Style
@Component({
selector: 'app-root',
template: `
<button [style.backgroundColor]="'green'">OK!</button>
`
})
export class AppComponent { }
Babel Coder
ngClass
@Component({
selector: 'app-root',
template: `
<button ngClass="btn btn-success">OK!</button>
`,
styles: [`
.btn {
padding: 6px 12px;
line-height: 1.5;
border: none;
}
.btn-success {
color: #FFF;
background-color: #449d44;
}
`]
})
export class AppComponent { }
Babel Coder
Pipes
Use pipes to transform strings, currency amounts, dates, and other data for display. Pipes are
simple functions to use in template expressions to accept an input value and return a
transformed value.
Babel Coder
Built-in Pipes
DatePipe
CurrencyPipe
DecimalPipe
SlicePipe
JsonPipe
PercentPipe
LowerPipe
LowerCasePipe
UpperCasePipe
TitlePipe
Etc
Using Pipes
@Component({
selector: 'lowerupper-pipe',
template: `<div>
<label>Name: </label><input #name (keyup)="change(name.value)" type="text">
<p>In lowercase: <pre>'{{value | lowercase}}'</pre>
<p>In uppercase: <pre>'{{value | uppercase}}'</pre>
</div>`
})
export class LowerUpperPipeComponent {
value: string;
change(value: string) { this.value = value; }
}
Babel Coder
Async Pipes
@Component({
selector: 'async-pipe',
template: `<div>{{ promise | async }}</div>`
})
export class SlicePipeListComponent {
promise = new Promise((resolve) => {
resolve('Hello');
});
}
Custom Pipes
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
standalone: true,
name: 'truncate'
})
export class TruncatePipe implements PipeTransform {
transform(value: string, maxLenght: number) {
return value.length > maxLenght ? value.slice(0, maxLenght) + '...' : value;
}
}
Custom Pipes
@Component({
selector: 'truncate-pipe',
imports: [TruncatePipe],
template: `<div>{{ 'Lorem Ipsum' | truncate: 3 }}</div>`
})
export class TruncatePipeComponent {
}
Services
logging service
data service
message bus
tax calculator
application configuration
Services
DI Framework
Service Component
1. gets registered 2. declares dependency
3. injects the service
Babel Coder
Services (Provider)
Babel Coder
@Injectable({
providedIn: 'root',
})
export class LeaveService{}
Services (Consumer)
Injector
Service A Service B Service C Service D
Component
constructor(private serviceA: ServiceA) {}
Babel Coder
private serviceA = inject(ServiceA)
Component
Services (Consumer)
Injector
Service B Service C Service D
Babel Coder
private serviceA = inject(ServiceA)
Component
Injector
Service B Service C Service D
Service A
resolves
Services
@Injectable({
providedIn: 'root',
})
export class LeaveService {
http = inject(HttpClient);
getLeaveList() {
return this.http.get<LeaveItem[]>(
`${import.meta.env.NG_APP_API_URL}/leaves`
);
}
}
Babel Coder
@Component({
selector: 'absence-management-leave-list',
standalone: true,
imports: [CommonModule, LeaveItemComponent],
templateUrl: './leave-list.component.html',
styleUrls: ['./leave-list.component.scss'],
})
export class LeaveListComponent {
leaveService = inject(LeaveService);
leaveList$ = this.leaveService.getLeaveList();
}
<div class="max-w-3xl mx-auto">
<h2 class="text-center text-green-700 text-3xl my-2">All Leaves</h2>
<section class="grid grid-cols-3 gap-2">
<absence-management-leave-item
*ngFor="let leave of leaveList$ | async"
[leave]="leave"
></absence-management-leave-item>
</section>
</div>
Service
Component Component
Reactive Programming
Babel Coder
let a = 1
let b = 2
let c = a + b // 3
a = 4
c = 3
c = 6
Babel Coder
reactive programming
Reactive programming is a programming paradigm oriented around data flows
and the propagation of change
let a
let b
let c
1
2
3
4
5
3 7 9
Babel Coder
reactive programming
RP Asynchronous Dataflow
= +
let a
let b
let c
1
2
3
4
5
3 7 9
Stream
Babel Coder
reactive programming
1 Define the different streams
2 Define the operations
+
let a
let b
let c
1
2
3
4
5
3 7 9
Babel Coder
reactive programming
It allows you to specify the dynamic behavior of a value completely at the time of
creation.
let a = 1
let b = 2
console.log(a * 2)
console.log(b * 2)
IMP
let values$ = of(1, 2);
let transform$ = values$.pipe(map(a => a * 2));
transform$.subscribe(
value => console.log(value)
);
RP
Babel Coder
reactive programming
Babel Coder
functional reactive programming
FRP RP Functional
= +
let a
let b
1 3 4
2 6 8
map / reduce / filter
Babel Coder
RxJS
ReactiveX
An API for asynchronous programming with observable streams
stream
A sequence of values over time.
[0, 1, 2, 3, 4, 5]
[(100, 120), (200, 199), (33, 71)]
[
"b",
"ba",
"bab",
"babel"
]
Streams Operators
+
Babel Coder
observable
Observables act as a blueprint for how we want to create streams,
subscribe to them, react to new values,
and combine streams together to build new ones.
Observer Observable
Stream
Babel Coder
marble diagrams
let streamA$ = interval(1000);
let streamB$ = streamA$.pipe(map(a => a * 2));
streamB$.subscribe(console.log); 0
2
4
6
…
marble diagrams
marble diagrams
Babel Coder
marble diagrams
let streamA$ = interval(1000);
let streamB$ = streamA$.pipe(map(a => a * 2));
/*
streamA: ---0---1---2---3---4...
map(a => 2 * a)
streamB: ---0---2---4---6---8...
*/
streamB$.subscribe(value => console.log(value)); Babel Coder
reactive programming
It allows you to specify the dynamic behavior of a value completely at the time of
creation.
let a = 1
let b = 2
console.log(a * 2)
console.log(b * 2)
IMP
let values$ = of(1, 2);
let transform$ = values$.pipe(map(a => a * 2));
transform$.subscribe(
value => console.log(value)
);
RP
Babel Coder
Subscribing to Observables
Babel Coder
const subscription = interval(1_000).subscribe({
next: (v) => console.log(v),
error: (err) => console.error(err),
complete: () => console.log('completed!'),
});
setTimeout(() => subscription.unsubscribe,
5_000);
0
1
2
3
4
map
interval(1000)
.pipe(map((v) => v * 2))
.subscribe((value) =>
console.log(value));
0
2
4
...
Babel Coder
filter
interval(1000)
.pipe(filter((v) => v % 2 === 0))
.subscribe((value) =>
console.log(value));
0
2
4
...
Babel Coder
merge
const timer1 = interval(500).pipe(take(3));
const timer2 = interval(1000).pipe(take(3));
merge(timer1, timer2).subscribe((value) => console.log(value));
0
1
0
2
1
2
Babel Coder
concat
const timer1 = interval(500).pipe(take(3));
const timer2 = interval(1000).pipe(take(3));
concat(timer1, timer2).subscribe((value) => console.log(value));
0
1
2
0
1
2 Babel Coder
mergeAll
of(1, 2, 3)
.pipe(
map((v) => interval(500).pipe(take(v * 2))),
mergeAll()
)
.subscribe(console.log); Babel Coder
mergeMap
of(1, 2, 3)
.pipe(mergeMap((v) => interval(500).pipe(take(v * 2))))
.subscribe(console.log);
Babel Coder
concatAll
fromEvent(document, 'click')
.pipe(
map(() => interval(500).pipe(take(3))),
concatAll()
)
.subscribe((x) => console.log(x));
Babel Coder
switchMap
interval(500)
.pipe(take(3))
.pipe(switchMap((x) => of(x, x ** 2, x ** 3)))
.subscribe((x) => console.log(x));
Babel Coder
combineLatest
const firstTimer = timer(0, 1000).pipe(take(3));
const secondTimer = timer(500, 1000).pipe(take(3));
combineLatest([firstTimer, secondTimer]).subscribe((value) =>
console.log(value)
);
Babel Coder
debounceTime
fromEvent(document, 'click')
.pipe(
debounceTime(1000),
map(() => 'x')
)
.subscribe((x) => console.log(x));
Babel Coder
retry
interval(100)
.pipe(
mergeMap((val) => (val > 5 ? throwError(() => 'Error!') : of(val))),
retry(2) // retry 2 times on error
)
.subscribe({
next: (value) => console.log(value),
error: (err) => console.log(`${err}: Retried 2 times then quit!`),
}); Babel Coder
distinctUntilChanged
of(1, 1, 1, 2, 2, 2, 1, 1, 3, 3)
.pipe(distinctUntilChanged())
.subscribe(console.log);
1
2
1
3
of({ x: 1, y: 1 }, { x: 1, y: 2 }, { x: 2, y: 2 }, { x: 3, y: 1 })
.pipe(
distinctUntilChanged((prev, curr) => {
return prev.x === curr.x || prev.y === curr.y;
})
)
.subscribe(console.log);
{ x: 1, y: 1 }
{ x: 2, y: 2 }
{ x: 3, y: 1 }
Babel Coder
Subject
A Subject is like an Observable, but can multicast to many Observers. Subjects are
like EventEmitters: they maintain a registry of many listeners.
const subject = new Subject<number>();
subject.subscribe({
next: (v) => console.log(`Observer
A: ${v}`),
});
subject.subscribe({
next: (v) => console.log(`Observer
B: ${v}`),
});
subject.next(1);
subject.next(2);
subject.subscribe({
next: (v) => console.log(`Observer
C: ${v}`),
});
subject.next(3);
Observer A: 1
Observer B: 1
Observer A: 2
Observer B: 2
Observer A: 3
Observer B: 3
Observer C: 3
Babel Coder
BehaviorSubject
BehaviorSubjects are useful for representing "values over time".
const subject = new BehaviorSubject<number>(0);
subject.subscribe({
next: (v) => console.log(`Observer A: ${v}`),
});
subject.subscribe({
next: (v) => console.log(`Observer B: ${v}`),
});
subject.next(1);
subject.next(2);
subject.subscribe({
next: (v) => console.log(`Observer C: ${v}`),
});
subject.next(3);
Observer A: 0
Observer B: 0
Observer A: 1
Observer B: 1
Observer A: 2
Observer B: 2
Observer B: 2
Observer A: 3
Observer B: 3
Observer C: 3
Babel Coder
Example I: Type-ahead Suggestions
const searchBox = document.getElementById('search-box') as HTMLInputElement;
fromEvent(searchBox, 'input')
.pipe(
map((e) => (e.target as HTMLInputElement).value),
filter((text) => text.length > 3),
debounceTime(100),
distinctUntilChanged(),
switchMap((searchTerm) => ajax(`/api/endpoint?search=${searchTerm}`))
)
.subscribe((v) => console.log(v));
Babel Coder
Example II: Retry API Request
ajax('/api/endpoint')
.pipe(retry(2))
.subscribe((v) => console.log(v));
Babel Coder
Form Design
<form>
<div class="form-group">
<label for="email">Email address</label>
<input type="email"
class="form-control"
id="email"
placeholder="Enter email">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password"
class="form-control"
id="password"
placeholder="Password">
</div>
<button type="submit"
class="btn btn-primary">
Submit
</button>
</form>
FormGroup
FromControl
FromControl
Routing
URL
Router
Route
Component
Babel Coder
/books
Books
Book1
Book2
Book3
Book4
Book#1
/books/1
/books/new
/books/1/edit
Babel Coder
const appRoutes: Routes = [
{
path: 'books',
component: BooksComponent,
children: [
{
path: '',
component: BookListComponent
},
{
path: 'new',
component: FormComponent
},
{
path: ':id',
component: BookComponent
}
]
}
]
Books
App
Babel Coder
const appRoutes: Routes = [
{
path: 'books',
component: BooksComponent,
children: [
{
path: '',
component: BookListComponent
},
{
path: 'new',
component: FormComponent
},
{
path: ':id',
component: BookComponent,
children: [
{
path: 'edit',
component: FormComponent
}
]
}
]
}
]
Books
App
Book
Form
Babel Coder
https://www.babelcoder.com/books/1/edit
path
Books
<router-outlet>
</router-outlet>
Book
<router-outlet>
</router-outlet>
Form
routerLink
<a class="btn btn-secondary btn-sm" routerLink="/books/new">Create</a>
<a class="nav-link"
routerLinkActive="active"
[routerLink]="['/books', book.id, 'details']">Content</a>
<a class="nav-link"
routerLinkActive="active"
routerLinkActiveOptions="{ exact: true }"
[routerLink]="['/']">Content</a>
<a class="page-link"
[routerLink]="['/books']" [queryParams]="{ page: page }">
{{ page }}
</a>
Babel Coder
ActivatedRoute
this.route.snapshot
this.route.paramMap
ActivatedRouteSnapshot
this.route.queryParamMap Observable
…
Babel Coder
ParamMap
Book
/books/1 /books/2
ngOnInit() {
this.route.paramMap.subscribe(
(params: ParamMap) => this.id = params.get(‘id’);
);
}
Babel Coder
CanActivate
Guard
navigate
Babel Coder
CanDeactivate
Guard
navigate
Babel Coder
REST
Stands for “Representational State Transfer”
RESTful Web Services are one way of providing
interoperability between computer systems on the Internet.
Babel Coder
Traditional Web Architectures
Server
Presentation
Application
Persistence
Browser
Babel Coder
Client / Server
Internet
Client Server
Uniform Interface
User
Article
Comment
URL
/users
GET
POST
PUT
PATCH
DELETE
List All Users
Create New User
Babel Coder
Uniform Interface
User
Article
Comment
URL
/users/1
HTML
XML
JSON
text/html
application/xml
application/json
Babel Coder
Stateless
Internet
Client Server
User
Article
Comment
Babel Coder
HTTP Status Codes
CODE STATUS
1xx Informational responses
2xx Success
3xx Redirection
4xx Client Errors
5xx Server Errors
HTTP Status Codes
CODE STATUS
200 OK
201 Created
204 No Content
401 Unauthorized
404 Not Found
405 Method Not Allowed
422 Unprocessable Entity
500 Internal Server Error
Authentication & Authorization
Authentication
Articles
Authorization
Babel Coder
Authentication & authorization
Authentication is the process of ascertaining that
somebody really is who he claims to be.
Authorization refers to rules that determine who is
allowed to do what.
Babel Coder
A
B
C
423432g2f3j23
g23hg42j4h2k3
jh3g56jh5gj333
423432g2f3j23
g23hg42j4h2k3
jh3g56jh5gj333
Babel Coder
A
B
C
423432g2f3j23
g23hg42j4h2k3
jh3g56jh5gj333
423432g2f3j23
Babel Coder
423432g2f3j23
g23hg42j4h2k3
jh3g56jh5gj333
Babel Coder
JSON Web Token
JSON Web Token (JWT) is a JSON-based open standard (RFC 7519) for creating access tokens that
assert some number of claims.
<HEADER>.<PAYLOAD>.<SIGNATURE>
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJtZXNzYWdlIjoiSldUIFJ1bGVzISIsImlhdCI6MTQ1OTQ0ODExOSwiZXhwIjoxNDU5NDU0NTE5fQ.-yIVBD5b73C75osbmwwshQ
Babel Coder

More Related Content

PPTX
react-slides.pptx
PDF
Introduction to JSON
PPTX
React + Redux Introduction
PDF
Angular - Chapter 7 - HTTP Services
PPTX
Document object model
PPTX
Introduction to angular with a simple but complete project
PPTX
Presentation1.pptx
PPTX
JSON: The Basics
react-slides.pptx
Introduction to JSON
React + Redux Introduction
Angular - Chapter 7 - HTTP Services
Document object model
Introduction to angular with a simple but complete project
Presentation1.pptx
JSON: The Basics

What's hot (20)

PDF
Spring MVC Framework
PPTX
PDF
Introduction to CSS3
PPTX
Core java complete ppt(note)
PPTX
Introduction to Spring Framework
PPTX
Getters_And_Setters.pptx
PDF
YAML Engineering: why we need a new paradigm
PPT
Maven Introduction
PPTX
Lab #2: Introduction to Javascript
PPT
Angular 8
PDF
JavaScript Fetch API
PDF
Okta docs
PPTX
Clean Pragmatic Architecture - Avoiding a Monolith
PPT
Java collections concept
PPTX
Java Stack Data Structure.pptx
PDF
MongoDB WiredTiger Internals
PPT
Serialization/deserialization
PPTX
Entity Framework Core
PPT
Java Streams
PDF
JavaScript - Chapter 8 - Objects
Spring MVC Framework
Introduction to CSS3
Core java complete ppt(note)
Introduction to Spring Framework
Getters_And_Setters.pptx
YAML Engineering: why we need a new paradigm
Maven Introduction
Lab #2: Introduction to Javascript
Angular 8
JavaScript Fetch API
Okta docs
Clean Pragmatic Architecture - Avoiding a Monolith
Java collections concept
Java Stack Data Structure.pptx
MongoDB WiredTiger Internals
Serialization/deserialization
Entity Framework Core
Java Streams
JavaScript - Chapter 8 - Objects
Ad

Similar to angular fundamentals.pdf angular fundamentals.pdf (20)

PDF
angular fundamentals.pdf
PPTX
Building a TV show with Angular, Bootstrap, and Web Services
PDF
Hidden Docs in Angular
PPTX
Angular2 + rxjs
PDF
Angular 4 for Java Developers
PDF
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
PDF
Technozaure - Angular2
PDF
[FEConf Korea 2017]Angular 컴포넌트 대화법
PDF
Angular 2 - The Next Framework
PDF
Commit University - Exploring Angular 2
PDF
Angular 2.0 - What to expect
PDF
ChtiJUG - Introduction à Angular2
PDF
Angular js 2.0, ng poznań 20.11
PPTX
Jan 2017 - a web of applications (angular 2)
PDF
What is your money doing?
PDF
AngularJS - Services
PPTX
Angular 2 - a New Hope
PPTX
Introduction to Angular2
PDF
Exploring Angular 2 - Episode 1
PDF
XebiConFr 15 - Brace yourselves Angular 2 is coming
angular fundamentals.pdf
Building a TV show with Angular, Bootstrap, and Web Services
Hidden Docs in Angular
Angular2 + rxjs
Angular 4 for Java Developers
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Technozaure - Angular2
[FEConf Korea 2017]Angular 컴포넌트 대화법
Angular 2 - The Next Framework
Commit University - Exploring Angular 2
Angular 2.0 - What to expect
ChtiJUG - Introduction à Angular2
Angular js 2.0, ng poznań 20.11
Jan 2017 - a web of applications (angular 2)
What is your money doing?
AngularJS - Services
Angular 2 - a New Hope
Introduction to Angular2
Exploring Angular 2 - Episode 1
XebiConFr 15 - Brace yourselves Angular 2 is coming
Ad

More from NuttavutThongjor1 (20)

PDF
Modern DevOps Day 5.pdfModern DevOps Day 5.pdf
PDF
Modern DevOps Day 4.pdfModern DevOps Day 4.pdf
PDF
Modern DevOps Day 3.pdfModern DevOps Day 3.pdf
PDF
Modern DevOps Day 2.pdfModern DevOps Day 2.pdf
PDF
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
PDF
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
PDF
Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
PDF
Nest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNe...
PDF
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
PDF
Nest.js RESTful API development.pdf Nest.js RESTful API development.pdf
PDF
Nest.js RESTful API development.pdfNest.js RESTful API development.pdf
PDF
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
PDF
Next.js web development.pdfNext.js web development.pdfNext.js web development...
PDF
Next.js web development.pdfNext.js web development.pdfNext.js web development...
PDF
Fullstack Nest.js and Next.js.pdfFullstack Nest.js and Next.js.pdfFullstack N...
PDF
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
PDF
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
PDF
10 วัฒนธรรมองค์กรของ DevOps.pdf10 วัฒนธรรมองค์กรของ DevOps.pdf
PDF
9 logging and monitoring.pdf 9 logging and monitoring.pdf
PDF
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf
Modern DevOps Day 5.pdfModern DevOps Day 5.pdf
Modern DevOps Day 4.pdfModern DevOps Day 4.pdf
Modern DevOps Day 3.pdfModern DevOps Day 3.pdf
Modern DevOps Day 2.pdfModern DevOps Day 2.pdf
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
Nest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNe...
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
Nest.js RESTful API development.pdf Nest.js RESTful API development.pdf
Nest.js RESTful API development.pdfNest.js RESTful API development.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...
Fullstack Nest.js and Next.js.pdfFullstack Nest.js and Next.js.pdfFullstack N...
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
10 วัฒนธรรมองค์กรของ DevOps.pdf10 วัฒนธรรมองค์กรของ DevOps.pdf
9 logging and monitoring.pdf 9 logging and monitoring.pdf
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf

Recently uploaded (20)

PDF
LEARNERS WITH ADDITIONAL NEEDS ProfEd Topic
PDF
LIFE & LIVING TRILOGY - PART (3) REALITY & MYSTERY.pdf
PPTX
Core Concepts of Personalized Learning and Virtual Learning Environments
PDF
AI-driven educational solutions for real-life interventions in the Philippine...
PDF
CISA (Certified Information Systems Auditor) Domain-Wise Summary.pdf
PDF
BP 505 T. PHARMACEUTICAL JURISPRUDENCE (UNIT 1).pdf
PDF
HVAC Specification 2024 according to central public works department
PDF
Τίμαιος είναι φιλοσοφικός διάλογος του Πλάτωνα
PDF
semiconductor packaging in vlsi design fab
PPTX
Computer Architecture Input Output Memory.pptx
PDF
Hazard Identification & Risk Assessment .pdf
PDF
International_Financial_Reporting_Standa.pdf
PDF
MBA _Common_ 2nd year Syllabus _2021-22_.pdf
PPTX
ELIAS-SEZIURE AND EPilepsy semmioan session.pptx
PPTX
Virtual and Augmented Reality in Current Scenario
PDF
1.3 FINAL REVISED K-10 PE and Health CG 2023 Grades 4-10 (1).pdf
PDF
What if we spent less time fighting change, and more time building what’s rig...
PDF
Environmental Education MCQ BD2EE - Share Source.pdf
PPTX
Module on health assessment of CHN. pptx
PDF
English Textual Question & Ans (12th Class).pdf
LEARNERS WITH ADDITIONAL NEEDS ProfEd Topic
LIFE & LIVING TRILOGY - PART (3) REALITY & MYSTERY.pdf
Core Concepts of Personalized Learning and Virtual Learning Environments
AI-driven educational solutions for real-life interventions in the Philippine...
CISA (Certified Information Systems Auditor) Domain-Wise Summary.pdf
BP 505 T. PHARMACEUTICAL JURISPRUDENCE (UNIT 1).pdf
HVAC Specification 2024 according to central public works department
Τίμαιος είναι φιλοσοφικός διάλογος του Πλάτωνα
semiconductor packaging in vlsi design fab
Computer Architecture Input Output Memory.pptx
Hazard Identification & Risk Assessment .pdf
International_Financial_Reporting_Standa.pdf
MBA _Common_ 2nd year Syllabus _2021-22_.pdf
ELIAS-SEZIURE AND EPilepsy semmioan session.pptx
Virtual and Augmented Reality in Current Scenario
1.3 FINAL REVISED K-10 PE and Health CG 2023 Grades 4-10 (1).pdf
What if we spent less time fighting change, and more time building what’s rig...
Environmental Education MCQ BD2EE - Share Source.pdf
Module on health assessment of CHN. pptx
English Textual Question & Ans (12th Class).pdf

angular fundamentals.pdf angular fundamentals.pdf