SlideShare a Scribd company logo
1 of 30
Download to read offline
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
Table	of	Contents
Introduction
Hello	Angular	2
Tooling
Components
Templates
Services
Routing
Forms
Server	Side	Communication
Testing
1
Angular	2	Applied
This	is	a	step	by	step	guide	on	how	to	apply	the	latest	Angular	2	techniques	to
build	a	non-trivial	application.
Introduction
2
Hello	Angular	2
Hello	Angular	2
3
Tooling
Build	the	Project
npm	install	-g	angular-cli
ng	g	ng2-applied
cd	ng2-applied
npm	install
ng	serve
Update	app.css
body	{
		background-color:	whitesmoke;
}
.content	.mdl-layout__header	{
		background-color:	#263238;
}
.content	.mdl-spinner	{
		margin:	0	auto;
}
.mdl-navigation__link--icon>.material-icons	{
		margin-right:	8px;
		margin-top:	8px;
}
.page-content	{
		max-width:	1200px;
Tooling
4
width:	100%;
		margin:	0	auto;
		padding:	0;
}
.item-card.mdl-card	{
		width:	100%;
		min-height:	inherit;
		cursor:	pointer;
}
.item-card	.mdl-textfield	{
		width:	100%;
}
.item-card	.mdl-textfield__input	{
		border:	none;
		border-bottom:	1px	solid	rgba(0,	0,	0,	.12);
		display:	block;
		font-size:	16px;
		margin:	0;
		padding:	4px	0;
		width:	100%;
		background:	0	0;
		text-align:	left;
		color:	inherit;
}
.item-card	label	{
		font-size:	12px;
		font-weight:	bold;
}
*:focus	{
		outline:	none;
}
Update	app.component.ts
Tooling
5
import	{	Component	}	from	'@angular/core';
@Component({
		selector:	'app-root',
		templateUrl:	'./app.component.html',
		styleUrls:	['./app.component.css']
})
export	class	AppComponent	{
		title	=	'Angular	2	Applied';
}
Update	app.component.html
<div	class="content	mdl-layout	mdl-js-layout	mdl-layout--fixed-h
eader">
		<header	class="mdl-layout__header">
				<div	class="mdl-layout__header-row">
						<span	class="mdl-layout-title">{{title}}</span>
						<div	class="mdl-layout-spacer"></div>
						<nav	class="mdl-navigation"></nav>
				</div>
		</header>
		<main	class="mdl-layout__content	page-content">
				<h2	style="text-align:	center;">Hello	Angular	2	applied!</h2>
		</main>
</div>
Additional	Steps
npm	install	-g	json-server
Tooling
6
"scripts":	{
		"start":	"concurrently	"npm	run	server"	"ng	serve"",
		"server":	"json-server	--watch	server/api/db.json",
		"lint":	"tslint	"src/**/*.ts"",
		"test":	"ng	test",
		"pree2e":	"webdriver-manager	update",
		"e2e":	"protractor"
}
{
		"widgets":	[
				{
						"id":	1,
						"img":	"boxer.png",
						"name":	"Widget	1",
						"description":	"This	is	a	description",
						"featured":	false
				},
				{
						"id":	2,
						"img":	"dachshund.png",
						"name":	"Widget	2",
						"description":	"This	is	a	description!",
						"featured":	true
				},
				{
						"id":	3,
						"img":	"hound.png",
						"name":	"Widget	3",
						"description":	"This	is	a	lovely	widget",
						"featured":	false
				}
		]
}
Tooling
7
Components
Create	widgets.component.ts
import	{	Component,	OnInit	}	from	'@angular/core';
@Component({
		selector:	'app-widgets',
		templateUrl:	'./widgets.component.html',
		styleUrls:	['./widgets.component.css']
})
export	class	WidgetsComponent	implements	OnInit	{
		constructor()	{}
		ngOnInit()	{}
}
Create	widgets.component.html
<div	class="mdl-grid	items">
		<div	class="mdl-cell	mdl-cell--61-col">
				<div	class="item-card	mdl-card	mdl-shadow--2dp">
						<div	class="mdl-card__title">
								<h2	class="mdl-card__title-text">Widgets</h2>
						</div>
						<div	class="mdl-card__supporting-text">
								Pending.
						</div>
				</div>
		</div>
</div>
Create	widgets.component.css
Components
8
.items	{
		padding:	20px;
}
Update	app.module.ts
import	{	BrowserModule	}	from	'@angular/platform-browser';
import	{	NgModule	}	from	'@angular/core';
import	{	FormsModule	}	from	'@angular/forms';
import	{	HttpModule	}	from	'@angular/http';
import	{	AppComponent	}	from	'./app.component';
import	{	WidgetsComponent	}	from	'./widgets/widgets.component';
@NgModule({
		declarations:	[
				AppComponent,
				WidgetsComponent,
		],
		imports:	[
				BrowserModule,
				FormsModule,
				HttpModule
		],
		bootstrap:	[AppComponent]
})
export	class	AppModule	{	}
Update	app.component.html
Components
9
<div	class="content	mdl-layout	mdl-js-layout	mdl-layout--fixed-h
eader">
		<header	class="mdl-layout__header">
				<div	class="mdl-layout__header-row">
						<span	class="mdl-layout-title">{{title}}</span>
						<div	class="mdl-layout-spacer"></div>
						<nav	class="mdl-navigation"></nav>						
				</div>
		</header>
		<main	class="mdl-layout__content	page-content">
				<app-widgets></app-widgets>
		</main>
</div>
Create	widget.model.ts
export	interface	Widget	{
		id:	number;
		img?:	string;
		name?:	string;
		description?:	string;
		featured?:	boolean;
}
Components
10
export	const	widgets	=	[
		{
				"id":	1,
				"name":	"Widget	1",
				"description":	"This	is	a	description",
				"featured":	true
		},
		{
				"id":	2,
				"name":	"Widget	2",
				"description":	"This	is	a	description!",
				"featured":	false
		},
		{
				"id":	3,
				"name":	"Widget	3",
				"description":	"This	is	a	lovely	widget",
				"featured":	false
		}
];
Update	widgets.component.ts
Components
11
import	{	Component,	OnInit	}	from	'@angular/core';
import	{	Widget,	widgets	}	from	'../shared';
@Component({
		selector:	'app-widgets',
		templateUrl:	'./widgets.component.html',
		styleUrls:	['./widgets.component.css']
})
export	class	WidgetsComponent	implements	OnInit	{
		widgets:	Array<Widget>	=	widgets;
		constructor()	{}
		ngOnInit()	{}
}
Update	widgets.component.html
<div	class="mdl-grid	items">
		<div	class="mdl-cell	mdl-cell--61-col">
				<div	class="item-card	mdl-card	mdl-shadow--2dp">
						<div	class="mdl-card__title">
								<h2	class="mdl-card__title-text">Widgets</h2>
						</div>
						<div	class="mdl-card__supporting-text">
								<pre>{{widgets	|	json}}</pre>
						</div>
				</div>
		</div>
</div>
Create	app-routing.module.ts
Components
12
import	{	NgModule	}	from	'@angular/core';
import	{	Routes,	RouterModule	}	from	'@angular/router';
import	{	WidgetsComponent	}	from	'./widgets/widgets.component';
const	routes:	Routes	=	[
		{path:	'',						redirectTo:	'/widgets',	pathMatch:	'full'	},
		{path:	'widgets',	component:	WidgetsComponent},
		{path:	'**',					redirectTo:	'/widgets',	pathMatch:	'full'}
];
@NgModule({
		imports:	[RouterModule.forRoot(routes)],
		exports:	[RouterModule],
		providers:	[]
})
export	class	Ng2RestAppRoutingModule	{	}
Update	app.module.ts
Components
13
import	{	BrowserModule	}	from	'@angular/platform-browser';
import	{	NgModule	}	from	'@angular/core';
import	{	FormsModule	}	from	'@angular/forms';
import	{	HttpModule	}	from	'@angular/http';
import	{	AppRoutingModule	}	from	'./app-routing.module';
import	{	AppComponent	}	from	'./app.component';
import	{	WidgetsComponent	}	from	'./widgets/widgets.component';
@NgModule({
		declarations:	[
				AppComponent,
				WidgetsComponent,
		],
		imports:	[
				BrowserModule,
				FormsModule,
				HttpModule,
				AppRoutingModule
		],
		bootstrap:	[AppComponent]
})
export	class	AppModule	{	}
Update	app.component.ts
export	class	AppComponent	{
		title	=	'Angular	2	Applied';
		links	=	{
				widgets:	['/widgets']
		};
}
Update	app.component.html
Components
14
<div	class="content	mdl-layout	mdl-js-layout	mdl-layout--fixed-h
eader">
		<header	class="mdl-layout__header">
				<div	class="mdl-layout__header-row">
						<span	class="mdl-layout-title">{{title}}</span>
						<div	class="mdl-layout-spacer"></div>
						<nav	class="mdl-navigation">
								<a	class="mdl-navigation__link"	[routerLink]="links.widg
ets">Widgets</a>
						</nav>
				</div>
		</header>
		<main	class="mdl-layout__content	page-content">
				<router-outlet></router-outlet>
		</main>
</div>
Components
15
Templates
update	widgets.component.html
<div	class="mdl-grid	items">
		<div	class="mdl-cell	mdl-cell--6-col">
				<div	class="item-card	mdl-card	mdl-shadow--2dp">
						<div>
								<div	class="mdl-card__title">
										<h2	class="mdl-card__title-text">Name</h2>
								</div>
								<div	class="mdl-card__supporting-text">
										Description
								</div>
						</div>
						<div	class="mdl-card__menu">
								<button	class="mdl-button	mdl-button--icon	mdl-js-button
	mdl-js-ripple-effect">
										<i	class="material-icons">close</i>
								</button>
						</div>
				</div>
		</div>
		<div	class="mdl-cell	mdl-cell--6-col">
				<div	class="item-card	mdl-card	mdl-shadow--2dp">
						<div	class="mdl-card__title">
								<h2	class="mdl-card__title-text">Select	a	Widget</h2>
						</div>
						<div	class="mdl-card__supporting-text">
								Pending
						</div>
				</div>
		</div>
</div>
ngFor
Templates
16
<div	class="mdl-cell	mdl-cell--6-col">
		<div	*ngFor="let	widget	of	widgets"
				class="item-card	mdl-card	mdl-shadow--2dp">
				<div>
						<div	class="mdl-card__title">
								<h2	class="mdl-card__title-text">{{widget.name}}</h2>
						</div>
						<div	class="mdl-card__supporting-text">
								{{widget.description}}
						</div>
				</div>
		</div>
</div>
Property	Binding
TODO:	Complete
Event	Binding
export	class	WidgetsComponent	implements	OnInit	{
		widgets:	Array<Widget>	=	widgets;
		selectedWidget:	Widget;
		constructor()	{}
		ngOnInit()	{}
		selectWidget(widget:	Widget)	{
				this.selectedWidget	=	widget;
		}
}
Templates
17
<div	class="mdl-cell	mdl-cell--6-col">
		<div	class="item-card	mdl-card	mdl-shadow--2dp">
				<div	class="mdl-card__title">
						<h2	class="mdl-card__title-text">Select	a	Widget</h2>
				</div>
				<div	class="mdl-card__supporting-text">
						<pre>{{selectedWidget	|	json}}</pre>
				</div>
		</div>
</div>
export	class	WidgetsComponent	implements	OnInit	{
		widgets:	Array<Widget>	=	widgets;
		selectedWidget:	Widget;
		constructor()	{}
		ngOnInit()	{}
		resetWidget()	{
				let	emptyWidget:	Widget	=	{id:	null,	name:	'',	description:	
''};
				this.selectedWidget	=	emptyWidget;
		}
		selectWidget(widget:	Widget)	{
				this.selectedWidget	=	widget;
		}
		deleteWidget(widget:	Widget)	{
				this.widgets.splice(this.widgets.indexOf(widget),	1);
				this.resetWidget();
		}
}
Templates
18
<button	(click)="deleteWidget(widget);	$event.stopPropagation();"
								class="mdl-button	mdl-button--icon	mdl-js-button	mdl-js-
ripple-effect">
		<i	class="material-icons">close</i>
</button>
Two-way	Binding
TODO:	Complete
ngIf
<div	class="mdl-card__title">
		<h2	class="mdl-card__title-text"	*ngIf="selectedWidget">{{sele
ctedWidget.name}}</h2>
		<h2	class="mdl-card__title-text"	*ngIf="!selectedWidget">Selec
t	a	Widget</h2>
</div>
ngSwitch
TODO:	Complete
Safe	Navigation	Operator
Templates
19
<div	class="item-card	mdl-card	mdl-shadow--2dp">
		<div	class="mdl-card__title">
				<h2	class="mdl-card__title-text"	*ngIf="selectedWidget">{{se
lectedWidget.name}}</h2>
				<h2	class="mdl-card__title-text"	*ngIf="!selectedWidget">Sel
ect	a	Widget</h2>
		</div>
		<div	class="mdl-card__supporting-text">
				<h6>{{selectedWidget.description}}</h6>
		</div>
</div>
<div	class="item-card	mdl-card	mdl-shadow--2dp">
		<div	class="mdl-card__title">
				<h2	class="mdl-card__title-text"	*ngIf="selectedWidget">{{se
lectedWidget.name}}</h2>
				<h2	class="mdl-card__title-text"	*ngIf="!selectedWidget">Sel
ect	a	Widget</h2>
		</div>
		<div	class="mdl-card__supporting-text">
				<h6>{{selectedWidget?.description}}</h6>
		</div>
</div>
Templates
20
Services
import	{	Injectable	}	from	'@angular/core';
import	{	Widget,	widgets	}	from	'./widget.model';
@Injectable()
export	class	WidgetsService	{
		widgets:	Widget[]	=	widgets;
		constructor()	{}
		loadWidgets()	{
				return	this.widgets;
		}
}
export	{	WidgetsService	}	from	'./widgets.service';
export	{	Widget	}	from	'./widget.model';
Services
21
import	{	WidgetsService	}	from	'./shared';
import	{	AppComponent	}	from	'./app.component';
import	{	WidgetsComponent	}	from	'./widgets/widgets.component';
@NgModule({
		declarations:	[
				AppComponent,
				WidgetsComponent,
		],
		imports:	[
				BrowserModule,
				FormsModule,
				HttpModule,
				AppRoutingModule
		],
		providers:	[WidgetsService],
		bootstrap:	[AppComponent]
})
export	class	AppModule	{	}
Services
22
import	{	Component,	OnInit	}	from	'@angular/core';
import	{	WidgetsService,	Widget	}	from	'../shared';
@Component({
		selector:	'app-widgets',
		templateUrl:	'./widgets.component.html',
		styleUrls:	['./widgets.component.css']
})
export	class	WidgetsComponent	implements	OnInit	{
		widgets:	Array<Widget>;
		selectedWidget:	Widget;
		constructor(
				private	widgetsService:	WidgetsService
		)	{}
		ngOnInit()	{
				this.widgets	=	this.widgetsService.loadWidgets();
		}
		//...	
}
Services
23
@Injectable()
export	class	WidgetsService	{
		widgets:	Widget[]	=	widgets;
		constructor()	{}
		loadWidgets()	{
				return	this.widgets;
		}
		//...
		deleteWidget(widget:	Widget)	{
				this.widgets	=	this.widgets.filter(w	=>	w.id	!==	widget.id);
				return	widget;
		}
}
Services
24
export	class	WidgetsComponent	implements	OnInit	{
		widgets:	Array<Widget>;
		selectedWidget:	Widget;
		constructor(
				private	widgetsService:	WidgetsService
		)	{}
		ngOnInit()	{
				this.widgets	=	this.widgetsService.loadWidgets();
		}
		//...	
		deleteWidget(widget:	Widget)	{
				this.widgetsService.deleteWidget(widget);
				//	Refresh	the	widgets	collection
				this.widgets	=	this.widgetsService.loadWidgets();
				//	Generally,	we	would	want	to	wait	for	the	result	of	`widge
tsService.deleteWidget`
				//	before	resetting	the	current	widget.
				this.resetWidget();
		}
}
loadWidget(id)	{
		return	this.widgets.find(widget	=>	widget.id	===	+id);
}
saveWidget(widget:	Widget)	{
		return	(widget.id)	?	this.updateWidget(widget)	:	this.createWi
dget(widget);
}
Services
25
createWidget(widget:	Widget)	{
		this.widgets	=	[...this.widgets,	widget];
		return	widget;
}
updateWidget(widget:	Widget)	{
		this.widgets	=	this.widgets.map(w	=>	{
				return	w.id	===	widget.id	?	widget	:	w;
		});
		return	widget;
}
Services
26
Routing
Routing
27
Forms
Forms
28
Server	Side	Communication
Server	Side	Communication
29
Testing
Testing
30

More Related Content

What's hot

What's hot (7)

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
 
Ultimate Introduction To AngularJS
Ultimate Introduction To AngularJSUltimate Introduction To AngularJS
Ultimate Introduction To AngularJS
 
Angular Dependency Injection
Angular Dependency InjectionAngular Dependency Injection
Angular Dependency Injection
 
Data Flow Patterns in Angular 2 - Sebastian Müller
Data Flow Patterns in Angular 2 -  Sebastian MüllerData Flow Patterns in Angular 2 -  Sebastian Müller
Data Flow Patterns in Angular 2 - Sebastian Müller
 
Angular 2: core concepts
Angular 2: core conceptsAngular 2: core concepts
Angular 2: core concepts
 
Angular 4 Introduction Tutorial
Angular 4 Introduction TutorialAngular 4 Introduction Tutorial
Angular 4 Introduction Tutorial
 
AngularJS Fundamentals + WebAPI
AngularJS Fundamentals + WebAPIAngularJS Fundamentals + WebAPI
AngularJS Fundamentals + WebAPI
 

Similar to Angular2 applied

4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
tilejak773
 
Introductory tutorial for sap2000
Introductory tutorial for sap2000Introductory tutorial for sap2000
Introductory tutorial for sap2000
Thomas Britto
 

Similar to Angular2 applied (20)

Angular Js Basics
Angular Js BasicsAngular Js Basics
Angular Js Basics
 
Top 7 Angular Best Practices to Organize Your Angular App
Top 7 Angular Best Practices to Organize Your Angular AppTop 7 Angular Best Practices to Organize Your Angular App
Top 7 Angular Best Practices to Organize Your Angular App
 
Front end development with Angular JS
Front end development with Angular JSFront end development with Angular JS
Front end development with Angular JS
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
 
AngularJS RTP Slides - Angular 2 Demo #ngtattoo with Angular CLI, Newest New ...
AngularJS RTP Slides - Angular 2 Demo #ngtattoo with Angular CLI, Newest New ...AngularJS RTP Slides - Angular 2 Demo #ngtattoo with Angular CLI, Newest New ...
AngularJS RTP Slides - Angular 2 Demo #ngtattoo with Angular CLI, Newest New ...
 
Angular js interview question answer for fresher
Angular js interview question answer for fresherAngular js interview question answer for fresher
Angular js interview question answer for fresher
 
AngularConf2016 - A leap of faith !?
AngularConf2016 - A leap of faith !?AngularConf2016 - A leap of faith !?
AngularConf2016 - A leap of faith !?
 
Single Page Applications in SharePoint with Angular
Single Page Applications in SharePoint with AngularSingle Page Applications in SharePoint with Angular
Single Page Applications in SharePoint with Angular
 
Angular 6 Training with project in hyderabad india
Angular 6 Training with project in hyderabad indiaAngular 6 Training with project in hyderabad india
Angular 6 Training with project in hyderabad india
 
Angular Interview Questions-PDF.pdf
Angular Interview Questions-PDF.pdfAngular Interview Questions-PDF.pdf
Angular Interview Questions-PDF.pdf
 
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
 
Tech Webinar: Angular 2, Introduction to a new framework
Tech Webinar: Angular 2, Introduction to a new frameworkTech Webinar: Angular 2, Introduction to a new framework
Tech Webinar: Angular 2, Introduction to a new framework
 
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
 
Introductory tutorial for sap2000
Introductory tutorial for sap2000Introductory tutorial for sap2000
Introductory tutorial for sap2000
 
はじめてのAngular2
はじめてのAngular2はじめてのAngular2
はじめてのAngular2
 
Angular.ppt
Angular.pptAngular.ppt
Angular.ppt
 
Angular js 1.3 presentation for fed nov 2014
Angular js 1.3 presentation for fed   nov 2014Angular js 1.3 presentation for fed   nov 2014
Angular js 1.3 presentation for fed nov 2014
 
Introduction to single page application with angular js
Introduction to single page application with angular jsIntroduction to single page application with angular js
Introduction to single page application with angular js
 
Angular 2.0
Angular  2.0Angular  2.0
Angular 2.0
 
Angular 2: Migration - SSD 2016 London
Angular 2: Migration - SSD 2016 LondonAngular 2: Migration - SSD 2016 London
Angular 2: Migration - SSD 2016 London
 

Recently uploaded

audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkkaudience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
lolsDocherty
 
Production 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptxProduction 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptx
ChloeMeadows1
 

Recently uploaded (17)

Development Lifecycle.pptx for the secure development of apps
Development Lifecycle.pptx for the secure development of appsDevelopment Lifecycle.pptx for the secure development of apps
Development Lifecycle.pptx for the secure development of apps
 
I’ll See Y’All Motherfuckers In Game 7 Shirt
I’ll See Y’All Motherfuckers In Game 7 ShirtI’ll See Y’All Motherfuckers In Game 7 Shirt
I’ll See Y’All Motherfuckers In Game 7 Shirt
 
How Do I Begin the Linksys Velop Setup Process?
How Do I Begin the Linksys Velop Setup Process?How Do I Begin the Linksys Velop Setup Process?
How Do I Begin the Linksys Velop Setup Process?
 
GOOGLE Io 2024 At takes center stage.pdf
GOOGLE Io 2024 At takes center stage.pdfGOOGLE Io 2024 At takes center stage.pdf
GOOGLE Io 2024 At takes center stage.pdf
 
Thank You Luv I’ll Never Walk Alone Again T shirts
Thank You Luv I’ll Never Walk Alone Again T shirtsThank You Luv I’ll Never Walk Alone Again T shirts
Thank You Luv I’ll Never Walk Alone Again T shirts
 
The Use of AI in Indonesia Election 2024: A Case Study
The Use of AI in Indonesia Election 2024: A Case StudyThe Use of AI in Indonesia Election 2024: A Case Study
The Use of AI in Indonesia Election 2024: A Case Study
 
Free scottie t shirts Free scottie t shirts
Free scottie t shirts Free scottie t shirtsFree scottie t shirts Free scottie t shirts
Free scottie t shirts Free scottie t shirts
 
Premier Mobile App Development Agency in USA.pdf
Premier Mobile App Development Agency in USA.pdfPremier Mobile App Development Agency in USA.pdf
Premier Mobile App Development Agency in USA.pdf
 
iThome_CYBERSEC2024_Drive_Into_the_DarkWeb
iThome_CYBERSEC2024_Drive_Into_the_DarkWebiThome_CYBERSEC2024_Drive_Into_the_DarkWeb
iThome_CYBERSEC2024_Drive_Into_the_DarkWeb
 
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkkaudience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
 
Production 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptxProduction 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptx
 
Statistical Analysis of DNS Latencies.pdf
Statistical Analysis of DNS Latencies.pdfStatistical Analysis of DNS Latencies.pdf
Statistical Analysis of DNS Latencies.pdf
 
Bug Bounty Blueprint : A Beginner's Guide
Bug Bounty Blueprint : A Beginner's GuideBug Bounty Blueprint : A Beginner's Guide
Bug Bounty Blueprint : A Beginner's Guide
 
Pvtaan Social media marketing proposal.pdf
Pvtaan Social media marketing proposal.pdfPvtaan Social media marketing proposal.pdf
Pvtaan Social media marketing proposal.pdf
 
Cyber Security Services Unveiled: Strategies to Secure Your Digital Presence
Cyber Security Services Unveiled: Strategies to Secure Your Digital PresenceCyber Security Services Unveiled: Strategies to Secure Your Digital Presence
Cyber Security Services Unveiled: Strategies to Secure Your Digital Presence
 
Reggie miller choke t shirtsReggie miller choke t shirts
Reggie miller choke t shirtsReggie miller choke t shirtsReggie miller choke t shirtsReggie miller choke t shirts
Reggie miller choke t shirtsReggie miller choke t shirts
 
TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.
TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.
TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.
 

Angular2 applied