SlideShare a Scribd company logo
1 of 97
BEGINNER WORKSHOP TO ANGULARJS
WHO AM I?
ARI LERNER, FULLSTACK.IO
Author of ng-book and ng-newsletter
Author of a few others (D3 on Angular, Riding Rails with
AngularJS)
Teacher at HackReactor, General Assembly
Co-founder of Fullstack.io
Background in distributed computing and infrastructure
NG-BOOK.COM
TOOLS
TEXT EDITOR
Sublime Text 2/3
Textmate
Vim
Emacs
WEB BROWSER
Chrome
Firefox
Safari
WEB SERVER
Python
$pto - SmlHTSre 80
yhn m ipeTPevr 00
#o
r
$tit -owb-pt .
wsd n e -ah
WEB SERVER
NodeJS
$nmisalht-evrp ntl tpsre g
$ht-evr. - 80
tpsre / p 00
WEB SERVER
Golang
pcaemi
akg an
ipr (
mot
"m" "o" "e/tp
ft; lg; ntht"
)
fn mi( {
uc an)
ftPitn"evn tecretdrcoyo pr 88"
m.rnl(Srig h urn ietr n ot 00)
ht.ade"" ht.ieevrht.i(.))
tpHnl(/, tpFlSre(tpDr"")
er: ht.itnnSre"88" nl
r = tpLseAdev(:00, i)
i er! nl{
f r = i
lgFtl"itnnSre " er
o.aa(LseAdev: , r)
}
}
WEB SERVER
Serve the current directory
FLICKR API KEY
BUILDING OUR FIRST APP
Enter a name here

HELLO, !
DEMO
<tln-p>
hm gap
<ed
ha>
<il>et/il>
tteTs<tte
<ha>
/ed
<oy
bd>
<nu tp=tx"n-oe=yuNm"paeodr"ne anm hr"
ipt ye"et gmdl"orae lchle=Etr
ae ee>
<3Hlo{ yuNm }!/3
h>el { orae }<h>
<cit
srp
sc"tp:/jxgolai.o/jxlb/nuaj/..2aglrmnj"
r=hts/aa.ogepscmaa/isaglrs121/nua.i.s>
<srp>
/cit
<bd>
/oy
<hm>
/tl
n-p
gap
n-oe=yuNm"
gmdl"orae
{ yuNm }
{ orae }
DEFINE AN APPLICATION
DEFINE A MODULE
/ Ste
/ etr
aglrmdl(mAp,[)
nua.oue'yp' ];
/ Gte
/ etr
aglrmdl(mAp)
nua.oue'yp'
INVOKING OUR APPLICATION
ng-app
INVOKING OUR APPLICATION
<tl
hm>
<ed
ha>
<cit
srp
sc"tp:/jxgolai.o/jxlb/nuaj/..2aglrmnj"
r=hts/aa.ogepscmaa/isaglrs121/nua.i.s>
<srp>
/cit
<ha>
/ed
<oyn-p=mAp>
bd gap"yp"
<- Apiainrn fo hr ->
!- plcto us rm ee <bd>
/oy
<hm>
/tl
INVOKING OUR APPLICATION
<tl
hm>
<ed
ha>
<cit
srp
sc"tp:/jxgolai.o/jxlb/nuaj/..2aglrmnj"
r=hts/aa.ogepscmaa/isaglrs121/nua.i.s>
<srp>
/cit
<ha>
/ed
<oyn-p=mAp>
bd gap"yp"
<- Apiainrn fo hr ->
!- plcto us rm ee <bd>
/oy
<hm>
/tl

bd.gp(mAp)
oynAp'yp';
DIRECTIVE?!??
DIRECTIVES ARE FUNCTIONS
fnto symg {
ucin a(s)
aet"i"+mg;
lr(H
s)
}
...RUN ON ELEMENTS
fnto symg {
ucin a(s)
aet"i"+mg;
lr(H
s)
}

<i sy"ol"<dv
dv a=wrd>/i>

Say
BUILT-IN DIRECTIVES
NG-CLICK
<4Saei { sae}<h>
h>tt s { tt }/4
<utnn-lc=sae=!tt"Cag sae/utn
bto gcik"tt
sae>hne tt<bto>

STATE IS

Change state
NG-SHOW/NG-HIDE
<utnn-lc=sae=!tt"Cag sae/utn
bto gcik"tt
sae>hne tt<bto>
<i n-hw"tt"
dv gso=sae>
<4Imoto hdn we tesaei tu<h>
h>' u f iig hn h tt s re/4
<4Wee<h>
h>eee/4
<dv
/i>
<i n-ie"tt"
dv ghd=sae>
<4BO<h>
h>O!/4
<4Imol soigwe tesaei nttu<h>
h>' ny hwn hn h tt s o re/4
<dv
/i>

Change state
BOO!
I'M ONLY SHOWING WHEN THE STATE IF NOT TRUE
NG-MODEL
<nu n-oe=nm"tp=tx"paeodr"ne yu nm"/
ipt gmdl"ae ye"et lchle=Etr or ae >
<4{ nm }<h>
h>{ ae }/4

Enter your name
NG-REPEAT
<ln-nt"ae='r' 'nn' '' 'ob'"
u gii=nms[Ai, Aad, Q, Cly]>
<in-eet"aei nms>{nm }<l>
l grpa=nm n ae"{ ae }/i
<u>
/l

Ari
Anand
Q
Colby
EXPRESSIONS
Angular expressions are similar to JavaScript and can be thought
of like it.
<i> +2={ 1+2}<dv
dv1
{
}/i>
< n-lc=cut=cut+1>d oet tecut/>
a gcik"on
on
"Ad n o h on<a
EXPRESSIONS

ng.
thi
ood can be thought
Angular expressions are similar to JavaScript and
ag
of like it.ich is
h
,w
ors
<i> +2={ 1+2}<dv
dv1
{
}/i>
err t t e c u t / >
< n-lc=cut=cut+1>d oe o h on<a
a gcik"on
on
"Ad n
row
h
't t
on
d
ey
Th
SCOPES
Expressions have access to the variables inside the parent scope
DOING STUFF
AND WHAT ABOUT THE JAVASCRIPT?
SCOPES
The $ c p object is the glue between our JavaScript and our
soe
view (HTML).
<2Wloebc { ue.ae}<h>
h>ecm ak { srnm }/2
SCOPES

ed?
The $ c p object is the glue between fin JavaScript and our
soe
de our
e
m
view (HTML).
a
n
.
r
e
s
< 2 W l o e b c { u e . a e } <u
h>ecm ak { srnm }/2
h>
e is
her
W
$SCOPE
$cp.sr={
soeue
nm:'r'
ae Ai
}
;
SCOPES ARE JUST POJOS
/ Cet vrals
/ rae aibe
$cp.esg ='el'
soemsae
Hlo;
/ o ojcs
/ r bet
$cp.sr={
soeue
nm:'r'
ae Ai
}
;
/ Dfn fntos
/ eie ucin
$cp.a =fnto(s){
soesy
ucinmg
aet$cp.esg +""+mg;
lr(soemsae
s)
}
$
?
Just a name...
e?
nam
a

$
s in ?
at'

Wh a name...
Just
VIEW
<2{ msae}<h>
h>{ esg }/2
<3Wloebc { ue.ae}<h>
h>ecm ak { srnm }/3
<uto n-lc=sy"ol"'Syhlo/uto>
bttn gcik'a(Wrd)>a el<bttn

HELLO

WELCOME BACK ARI
Say hello
HOW TO GET ACCESS TO THE $ C P
SOE
CONTROLLERS
A controller is a piece of code that defines functionality for a part
of the page. Controllers are like mediators of functionality for
portions of the page.
<i n-otolr"dCnrle"
dv gcnrle=Adotolr>
<3Cuti a:{ cut}<h>
h>on s t { on }/3
< n-lc=adn("Adoe/>
a gcik"dOe)>d n<a
<dv
/i>
DEFINE A CONTROLLER
aglrmdl(mAp,[)
nua.oue'yp' ]
.otolr'dCnrle' fnto(soe {
cnrle(Adotolr, ucin$cp)
/ W hv acs t teHmCnrle' $cp
/ e ae ces o h oeotolrs soe
$cp.on =0
soecut
;
$cp.dOe=fnto( {
soeadn
ucin)
$cp.on + 1
soecut = ;
}
};
)
DATA
Client-side applications are only as exciting as the data they
contain.
GETTING DATA
$ t p a wrapper on the browser's XMLHttpRequest API.
h t is
$tp{
ht(
mto:'E'
ehd GT,
ul 'tp/aifik.o/evcsrs'
r: ht:/p.lcrcmsrie/et,
prm:{
aas
/ Fik AIprmtr
/ lcr P aaees
mto:'lcritrsigesgtit,
ehd fik.neetnns.eLs'
aiky aie,
p_e: pKy
fra:'sn,
omt jo'
njoclbc:1
osnalak
}
};
)
XHR REQUESTS ARE ASYNC
CALLBACKS
$aa(
.jx{
ul:'xml.o'
r
eapecm,
tp:'E'
ye GT,
sces:fnto(aa {
ucs
ucindt)
/ Sces:!
/ ucs )
}
,
err fnto(esn {
ro: ucinrao)
/ Fiue:
/ alr (
}
}
)
CALLBACK HELL

f.edi(ore fnto(r,fls {
sradrsuc, uciner ie)
i (r){
f er
cnoelg'ro fnigfls '+er
osl.o(Err idn ie:
r)
}es {
le
flsfrahfnto(ieae flIdx {
ie.oEc(ucinflnm, iene)
cnoelgflnm)
osl.o(ieae
g(ore+flnm)sz(uciner vle){
msuc
ieae.iefnto(r, aus
i (r){
f er
cnoelg'ro ietfigfl sz:'+er
osl.o(Err dniyn ie ie
r)
}es {
le
cnoelgflnm +':'+vle)
osl.o(ieae
aus
apc =(auswdh/vle.egt
set
vle.it
aushih)
wdh.oEc(ucinwdh wdhne){
itsfrahfnto(it, itIdx
hih =Mt.on(it /apc)
egt
ahrudwdh
set
cnoelg'eiig'+flnm +'o'+hih +''+hih)
osl.o(rszn
ieae
t
egt
x
egt
ti.eiewdh hih)wiedsiain+''+wdh+''+flnm,f
hsrsz(it, egt.rt(etnto
w
it
_
ieae u
i (r)cnoelg'ro wiigfl:'+er
f er osl.o(Err rtn ie
r)
}
)
}bn(hs)
.idti)
}
}
)
}
)
}
};
)
PROMISES
Rather than passing a callback function into the $ t p
h t method
to get called when the data returns, the $ t p
h t object returns a
promise.
PROMISE API
poie
rms
.hnfnto(aa {
te(ucindt)
/ Cle we n err hv ocre wt dt
/ ald hn o ros ae curd ih aa
}
)
.ac(uciner {
cthfnto(r)
/ Cle we a errhsocre
/ ald hn n ro a curd
}
)
.ial(ucindt){
fnlyfnto(aa
/ Cle awy,rgrls o teotu rsl
/ ald las eades f h upt eut
}
)
USING $ T P
HT
aglrmdl(mAp,[)
nua.oue'yp' ]
.otolr'oeotolr,fnto(soe $tp {
cnrle(HmCnrle' ucin$cp, ht)
$cp.ePoo =fnto( {
soegthts
ucin)
$tp{
ht(
mto:'E'
ehd GT,
ul 'tp/aifik.o/evcsrs'
r: ht:/p.lcrcmsrie/et,
prm:{
aas
/ Fik AIprmtr
/ lcr P aaees
mto:'lcritrsigesgtit,
ehd fik.neetnns.eLs'
aiky aie,
p_e: pKy
fra:'sn,
omt jo'
prpg:3
e_ae ,
njoclbc:1
osnalak
}
}.hnfnto(aa {
)te(ucindt)
$cp.hts=dt.aapoo.ht;
soepoo
aadt.htspoo
};
)
}
};
)

Get photos
BUT WAIT A MINUTE
How come we can even call the $ t p
h t object?
aglrmdl(mAp,[)
nua.oue'yp' ]
.otolr'oeotolr,fnto(soe $tp {
cnrle(HmCnrle' ucin$cp, ht)
};
)
BUT WAIT A MINUTE
How come we can even call the $ t p
h t object?
!??!
aglrmdl(mAp,[)
nua.oue'yp' ]
c
ic?p , $ t p {
.otolr'oeotolr,fnto(soe ht)
cnrle(HmCnrle' ucin$
ag
M
};
)
DEPENDENCY INJECTION
Anytime we rely on a library (%99.9999999999 of all code we
write), it either:

needs to find the dependency itself or
needs to be handed the dependency
DEPENDENCY INJECTION
Angular handles this ugly process for us by making objects and
injecting them for us when invoking the objects.
aglrmdl(mAp,[)
nua.oue'yp' ]
.otolr'oeotolr,fnto(soe $tp {
cnrle(HmCnrle' ucin$cp, ht)
/ Bcuew'enmdte
/ eas ev ae hm
/ $cp ad$tp
/ soe n ht
/ aglrwl poieteet orcnrle
/ nua il rvd hs o u otolr
};
)
REMEMBER OUR M D L ?
OUE
/ te[ i als o mdl dpnece
/ h ] s
it f oue eednis
aglrmdl(mAp,[)
nua.oue'yp' ];
DEPENDENCY INJECTION
naming matters
order does not matter
on?
ati
ific
min

DEPENDENCY INJECTION
e
dl
namingnmatters
ha
to
order does not matter
w
Ho
p...
hel
can
hat
kt
naming o
bo matters
w a does not matter
order
kno
I

DEPENDENCY INJECTION
TEMPORARY $ C P OBJECTS
SOE
Controllers are temporary objects and hang around only while
they are needed.
SO HOW DO WE STORE DATA?
For instance, how do we keep a user logged in through the lifecycle of our application?
SERVICES
Singleton objects that persist for the life-cycle of the
application
A container for like methods and data
BUILT-IN SERVICES
Like directives, Angular comes packed with services and
providers (a special type of service)
$tp
ht
$ieu
tmot
$ c (security)
se
$o
lg
$
q
and more
CREATING OUR OWN SERVICE
aglrmdl(mAp)
nua.oue'yp'
.evc(Fik' fnto(ht){
srie'lcr, ucin$tp
ti.ePoo =fnto( {
hsgthts
ucin)
/ Dfn gthts)fnto
/ eie ePoo( ucin
}
};
)
CREATING OUR OWN SERVICE
aglrmdl(mAp)
nua.oue'yp'
.atr(Fik' fnto(ht){
fcoy'lcr, ucin$tp
rtr {
eun
gthts fnto( {
ePoo: ucin) }
}
};
)
CREATING OUR OWN SERVICE
aglrmdl(mAp)
nua.oue'yp'
.rvdr'lcr,fnto( {
poie(Fik' ucin)
vraie =';
a pKy
'
ti.eAie =fnto(e){
hsstpKy
ucinky
rtr aie =ky| aie;
eun pKy
e | pKy
}
ti.gt=fnto(ht){
hs$e
ucin$tp
ti.ePoo =fnto( {;
hsgthts
ucin) }
rtr ti;
eun hs
}
};
)
CREATING OUR OWN SERVICE
The p o i e ( is the only type of service we can use in the
rvdr)
c n i ( block as [ a e P o i e
ofg)
Nm]rvdr
aglrmdl(mAp)
nua.oue'yp'
.ofgfnto(lcrrvdr {
cni(ucinFikPoie)
FikPoie.eAie(KY)
lcrrvdrstpKy'E';
};
)
CONFIG()
The c n i ( function runs before our app is running and let's
ofg)
us set up the app.
RUN()
The r n )
u ( function is the first function to get run before any
other part of our app.
USING OUR SERVICE
Just like using Angulars!
aglrmdl(mAp)
nua.oue'yp'
.otolr'oeotolr,fnto(soe Fik){
cnrle(HmCnrle' ucin$cp, lcr
Fik.ePoo(
lcrgthts)
.hnfnto(aa {
te(ucindt)
$cp.hts=dt.hts
soepoo
aapoo;
};
)
};
)
NEVER USE THE $ T PIN A CONTROLLER
HT
WHY?
WHAT ABOUT MULTIPLE PAGES?
ROUTING
INSTALLATION
<tln-p>
hm gap
<ed<ha>
ha>/ed
<oy
bd>
<cit
srp
sc"tp:/jxgolai.o/jxlb/nuaj/..2aglrmnj"
r=hts/aa.ogepscmaa/isaglrs121/nua.i.s>
<srp>
/cit
<cit
srp
sc"tp:/jxgolai.o/jxlb/nuaj/..2aglrruemnj"
r=hts/aa.ogepscmaa/isaglrs121/nua-ot.i.s>
<srp>
/cit
<bd>
/oy
<hm>
/tl
INSTALLATION
/ Tl orAglrapo tenw
/ el u nua p f h e
/ nRuemdl dpnec
/ got oue eedny
aglrmdl(mAp,[nRue]
nua.oue'yp' 'got')
LAYOUTS
We can now define our routes, but where how will they show up
on the page?
LAYOUTS
We can now define our routes, but where how will they show up
on the page?
<oy
bd>
<edrHae<hae>
hae>edr/edr
<i n-iw">/i>
dv gve="<dv
<otrFoe<foe>
foe>otr/otr
<bd>
/oy
LAYOUTS
nRue
g o t switches the child element of the n V e directive.
giw
DEFINING ROUTES
The n R u e
g o t module provides us with a new provider where
we'll define routes called the $ o t P o i e .
ruervdr
aglrmdl(mAp)
nua.oue'yp'
.ofgfnto(ruervdr {
cni(ucin$otPoie)
/ Cniueorrue hr
/ ofgr u ots ee
};
)
DEFINING ROUTES: WHEN()
The w e ( method allows us to define a route and a route
hn)
configuration object.
aglrmdl(mAp)
nua.oue'yp'
.ofgfnto(ruervdr {
cni(ucin$otPoie)
$otPoie
ruervdr
.hn'' {
we(/,
tmltUl 'epae/oehm'
epaer: tmltshm.tl,
cnrle:'oeotolr
otolr HmCnrle'
}
)
};
)
DEFINING ROUTES: OTHERWISE()
The o h r i e )
t e w s ( method defines a catch-all route if no other
route matches:
aglrmdl(mAp)
nua.oue'yp'
.ofgfnto(ruervdr {
cni(ucin$otPoie)
$otPoie
ruervdr
.tews(
ohrie{
rdrcT:''
eieto /
}
)
};
)
TESTING
TESTING
Gives us assurance our code works as expected
Allows for confidence with application deployment
Knowledge transfer and maintainability
...
UNIT TESTING
Based off Jasmine syntax, Angular's Karma test runner runs our
tests in a headless browser in several different browsers, such as
Chrome, Safari, and PhantomJS.
UNIT TESTING
Focuses on testing small, atomic pieces of functionality.
dsrb(Ui cnrles ' fnto({
ecie'nt otolr: , ucin)
/ Mc temApmdl
/ ok h yp oue
bfrEc(oue'yp')
eoeahmdl(mAp);
dsrb(HmCnrle' fnto( {
ecie'oeotolr, ucin)
/ Lclvrals
/ oa aibe
vrHmCnrle,soe
a oeotolr cp;
bfrEc(net
eoeahijc(
fnto(cnrle,$otcp){
ucin$otolr roSoe
/ Cet anwcidsoe
/ rae
e hl cp
soe=$otcp.nw)
cp
roSoe$e(;
HmCnrle =$otolr'oeotolr,{
oeotolr
cnrle(HmCnrle'
$cp:soe
soe cp
};
)
})
);
i(sol hv nm st,fnto( {
t'hud ae ae e' ucin)
epc(cp.ae.oeeie(;
xetsoenm)tBDfnd)
};
)
};
)
};
)
UNIT TESTING
Do it.
ife.
l
ur
yo
ave
ill s
w
, it
y
usl Do it.
o
eri
S

UNIT TESTING
END-TO-END TESTING
Instead of clicking the browser trying to mimic our user's
actions...
E2E TESTING
Karma's test runner
tor
c
tra
Pro
Karma's test runner

E2E TESTING
PROTRACTOR
Protractor is an end-to-end test framework built off the
WebDriverJS browser automation framework.
END-TO-END TESTING OUR PAGE
dsrb(pg la' fnto( {
ecie'ae od, ucin)
vrln;
a ik
bfrEc(ucin){
eoeahfnto(
ln =eeetb.s(.edru l:t-hl());
ik
lmn(ycs'hae l inhcid2')
ln.lc(;
ikcik)
};
)
i(sol nvgt t te/bu pg' fnto( {
t'hud aiae o h aot ae, ucin)
epc(rwe.eCretr()tMth//bu/;
xetbosrgturnUl).oac(aot)
};
)
};
)
THANK YOU
NG-BOOK.COM
630+ page book with all this information and much much more.
The only constantly updating book available for Angular today.
ADDENDUM (JUST IN CASE)
CONTROLLERS HANDLE BUSINESS LOGIC
<i n-otolr"dCnrle"
dv gcnrle=Adotolr>
<3Cuti a:{ cut}<h>
h>on s t { on }/3
< n-lc=adn("Adoe/>
a gcik"dOe)>d n<a
<dv
/i>

COUNT IS AT: 0
Add one

More Related Content

What's hot

Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming LanguageGiuseppe Arici
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlNova Patch
 
News of the Symfony2 World
News of the Symfony2 WorldNews of the Symfony2 World
News of the Symfony2 WorldFabien Potencier
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScriptTodd Anglin
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Domenic Denicola
 
Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014
Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014
Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014Puppet
 
JavaScript Survival Guide
JavaScript Survival GuideJavaScript Survival Guide
JavaScript Survival GuideGiordano Scalzo
 
Swift internals
Swift internalsSwift internals
Swift internalsJung Kim
 
Intro to Advanced JavaScript
Intro to Advanced JavaScriptIntro to Advanced JavaScript
Intro to Advanced JavaScriptryanstout
 
Drupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodDrupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodjuanolalla
 
A swift introduction to Swift
A swift introduction to SwiftA swift introduction to Swift
A swift introduction to SwiftGiordano Scalzo
 
Writing Clean Code in Swift
Writing Clean Code in SwiftWriting Clean Code in Swift
Writing Clean Code in SwiftDerek Lee Boire
 

What's hot (20)

Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming Language
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in Perl
 
Sbaw091006
Sbaw091006Sbaw091006
Sbaw091006
 
Async Frontiers
Async FrontiersAsync Frontiers
Async Frontiers
 
News of the Symfony2 World
News of the Symfony2 WorldNews of the Symfony2 World
News of the Symfony2 World
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScript
 
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
 
Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014
Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014
Absolute Beginners Guide to Puppet Through Types - PuppetConf 2014
 
"let ECMAScript = 6"
"let ECMAScript = 6" "let ECMAScript = 6"
"let ECMAScript = 6"
 
The most exciting features of PHP 7.1
The most exciting features of PHP 7.1The most exciting features of PHP 7.1
The most exciting features of PHP 7.1
 
Perl 6 by example
Perl 6 by examplePerl 6 by example
Perl 6 by example
 
JavaScript Survival Guide
JavaScript Survival GuideJavaScript Survival Guide
JavaScript Survival Guide
 
Swift internals
Swift internalsSwift internals
Swift internals
 
Intro to Advanced JavaScript
Intro to Advanced JavaScriptIntro to Advanced JavaScript
Intro to Advanced JavaScript
 
Drupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodDrupal 8 in action, the route to the method
Drupal 8 in action, the route to the method
 
Symfony 2.0 on PHP 5.3
Symfony 2.0 on PHP 5.3Symfony 2.0 on PHP 5.3
Symfony 2.0 on PHP 5.3
 
PHP 8.1: Enums
PHP 8.1: EnumsPHP 8.1: Enums
PHP 8.1: Enums
 
Current state-of-php
Current state-of-phpCurrent state-of-php
Current state-of-php
 
A swift introduction to Swift
A swift introduction to SwiftA swift introduction to Swift
A swift introduction to Swift
 
Writing Clean Code in Swift
Writing Clean Code in SwiftWriting Clean Code in Swift
Writing Clean Code in Swift
 

Similar to Beginner workshop to angularjs presentation at Google

Nginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaNginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaTony Fabeen
 
Devinsampa nginx-scripting
Devinsampa nginx-scriptingDevinsampa nginx-scripting
Devinsampa nginx-scriptingTony Fabeen
 
Making the most of 2.2
Making the most of 2.2Making the most of 2.2
Making the most of 2.2markstory
 
Angular.js + Rails at WeWork or: The Accidental Feature
Angular.js + Rails at WeWork or: The Accidental FeatureAngular.js + Rails at WeWork or: The Accidental Feature
Angular.js + Rails at WeWork or: The Accidental FeatureJonathan Magen
 
Building modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and javaBuilding modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and javaAlexander Gyoshev
 
Accessible Web Components_Techshare India 2014
Accessible Web Components_Techshare India 2014Accessible Web Components_Techshare India 2014
Accessible Web Components_Techshare India 2014BarrierBreak
 
Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsHeroku
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony componentsMichael Peacock
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomyDongmin Yu
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJSPat Cito
 
Internet Technology and its Applications
Internet Technology and its ApplicationsInternet Technology and its Applications
Internet Technology and its Applicationsamichoksi
 
How Xslate Works
How Xslate WorksHow Xslate Works
How Xslate WorksGoro Fuji
 
Playing with d3.js
Playing with d3.jsPlaying with d3.js
Playing with d3.jsmangoice
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기NAVER D2
 
Introduction To Lamp
Introduction To LampIntroduction To Lamp
Introduction To LampAmzad Hossain
 
A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1jsalonen Salonen
 
02 Php Vars Op Control Etc
02 Php Vars Op Control Etc02 Php Vars Op Control Etc
02 Php Vars Op Control EtcGeshan Manandhar
 
Javascript fundamentals for php developers
Javascript fundamentals for php developersJavascript fundamentals for php developers
Javascript fundamentals for php developersChris Ramakers
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottO'Reilly Media
 

Similar to Beginner workshop to angularjs presentation at Google (20)

Nginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaNginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with Lua
 
Devinsampa nginx-scripting
Devinsampa nginx-scriptingDevinsampa nginx-scripting
Devinsampa nginx-scripting
 
JavaFX, because you're worth it
JavaFX, because you're worth itJavaFX, because you're worth it
JavaFX, because you're worth it
 
Making the most of 2.2
Making the most of 2.2Making the most of 2.2
Making the most of 2.2
 
Angular.js + Rails at WeWork or: The Accidental Feature
Angular.js + Rails at WeWork or: The Accidental FeatureAngular.js + Rails at WeWork or: The Accidental Feature
Angular.js + Rails at WeWork or: The Accidental Feature
 
Building modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and javaBuilding modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and java
 
Accessible Web Components_Techshare India 2014
Accessible Web Components_Techshare India 2014Accessible Web Components_Techshare India 2014
Accessible Web Components_Techshare India 2014
 
Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku Secrets
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony components
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Internet Technology and its Applications
Internet Technology and its ApplicationsInternet Technology and its Applications
Internet Technology and its Applications
 
How Xslate Works
How Xslate WorksHow Xslate Works
How Xslate Works
 
Playing with d3.js
Playing with d3.jsPlaying with d3.js
Playing with d3.js
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기
 
Introduction To Lamp
Introduction To LampIntroduction To Lamp
Introduction To Lamp
 
A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1
 
02 Php Vars Op Control Etc
02 Php Vars Op Control Etc02 Php Vars Op Control Etc
02 Php Vars Op Control Etc
 
Javascript fundamentals for php developers
Javascript fundamentals for php developersJavascript fundamentals for php developers
Javascript fundamentals for php developers
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter Scott
 

Recently uploaded

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 

Beginner workshop to angularjs presentation at Google