際際滷

際際滷Share a Scribd company logo
Forside

AngularJS
- Hvordan g奪 fra "Hello World" til en fullverdig applikasjon med AngularJS
Arnstein Johansen
@G0ldnarms
/in/arnsteinjohansen
/goldnarms
Agenda





Kjernefunksjonalitet i AngularJS
Hvordan komme kjapt i gang
Hvordan strukturere sitt prosjekt
Hvilke rammeverk / verkt淡y b淡r brukes med
AngularJS
 Snubletr奪der
 Responsiveness
 Ressurser
Kjernefunksjonalitet til AngularJS







Toveis binding
Modules
Controllers
Directives
Services
Dependency injection
Hvordan komme i gang








AngularSeed (NuGet, Git)
HotTowel (NuGet)
ng-boilerplate (Git)
MEAN (Git)
SideWaffle (NuGet)
Bower (http://bower.io/)
ng-modules (http://ngmodules.org/)
Hvordan strukturere sitt prosjekt





Filstruktur
Moduler
Rydde opp i kontrollere
Namespace
Snubletr奪der
 Error: 10 $digest() iterations reached. Aborting!
 Error: '$apply already in progress
https://github.com/yearofmoo/AngularJS-Scope.SafeApply

 Minnelekkasje

$scope.$on("$destroy", function() {
this.$scope = $scope = null;
});

 Debugging

.fail(function(e){
$log.error(e.errorMessage);
});

 Minification

KontollerCtrl.$inject = [$http, service]
app.Controller(KontrollerCtrl, KontrollerCtrl
- eller app.Controller(KontrollerCtrl, [$http, service, KontrollerCtrl]);
Responsiveness







link vs. compile
$broadcast vs. $emit
$watch
$apply
ng-if vs. ng-show
ng-bind, ng-model +++ vs. bind-once
Best served with 








Karma
Protractor
Batarang
Typescript
Breeze
Underscore.js
Angular UI
Ressurser





EggHead.io
Pluralsight
ng-learning (GitHub)
ng-newsletter
Ad

Recommended

Why Content Marketing is here to stay
Why Content Marketing is here to stay
際際滷s Singapore
05 1003chap1
05 1003chap1
StePhanie B. Guzman
A marketer's guide to visual communications
A marketer's guide to visual communications
際際滷s Singapore
Coachim ru 1
Coachim ru 1
Olmira Belankova
Coachim ru 2
Coachim ru 2
Olmira Belankova
Coachim 2
Coachim 2
Olmira Belankova
Coachim 1
Coachim 1
Olmira Belankova
Coachim ru 1
Coachim ru 1
Olmira Belankova
HTML5 - en int teori
HTML5 - en int teori
Dag Tjemsland
Intro to Azure DevOps
Intro to Azure DevOps
AudunSolemdal
Aws p奪 kartet - 2
Aws p奪 kartet - 2
P奪l Kristensen
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Geodata AS
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
leiftorger
Introduksjon til Spring Boot
Introduksjon til Spring Boot
Henrik Schwarz
Digital Eksamen - Integrasjon - SUHS 2014
Digital Eksamen - Integrasjon - SUHS 2014
Snorre L淡v奪s
AWS p奪 kartet
AWS p奪 kartet
P奪l Kristensen
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Frontkom
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Henrik Akselsen
BK2011 Utvikling av lette webapplikasjoner i java script og html
BK2011 Utvikling av lette webapplikasjoner i java script og html
Geodata AS
Responsiv design og Bootstrap 3
Responsiv design og Bootstrap 3
Morten Bergset
Nnug angular
Nnug angular
fnakstad
The Client Strikes Back
The Client Strikes Back
Magnus Green
Aud Marie Hauge, Epinova: Innledning til universell utforming p奪 web
Aud Marie Hauge, Epinova: Innledning til universell utforming p奪 web
Dag Tjemsland
Kundeseminar April 2014, Nytt i CorePublish
Kundeseminar April 2014, Nytt i CorePublish
CoreTrek
OOCSS e 脱lsk
OOCSS e 脱lsk
FINN.no
Objektorientering og design av kode
Objektorientering og design av kode
Rune Sundling
Web 2 0 gjennomf淡ring av prosjekter i skoleportalen
Web 2 0 gjennomf淡ring av prosjekter i skoleportalen
atso0701
NTNUs bruk av Feide.
NTNUs bruk av Feide.
Senter for IKT i utdanningen, redaksjon

More Related Content

Similar to Angular Fra hello world til en fullverdig app (20)

HTML5 - en int teori
HTML5 - en int teori
Dag Tjemsland
Intro to Azure DevOps
Intro to Azure DevOps
AudunSolemdal
Aws p奪 kartet - 2
Aws p奪 kartet - 2
P奪l Kristensen
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Geodata AS
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
leiftorger
Introduksjon til Spring Boot
Introduksjon til Spring Boot
Henrik Schwarz
Digital Eksamen - Integrasjon - SUHS 2014
Digital Eksamen - Integrasjon - SUHS 2014
Snorre L淡v奪s
AWS p奪 kartet
AWS p奪 kartet
P奪l Kristensen
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Frontkom
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Henrik Akselsen
BK2011 Utvikling av lette webapplikasjoner i java script og html
BK2011 Utvikling av lette webapplikasjoner i java script og html
Geodata AS
Responsiv design og Bootstrap 3
Responsiv design og Bootstrap 3
Morten Bergset
Nnug angular
Nnug angular
fnakstad
The Client Strikes Back
The Client Strikes Back
Magnus Green
Aud Marie Hauge, Epinova: Innledning til universell utforming p奪 web
Aud Marie Hauge, Epinova: Innledning til universell utforming p奪 web
Dag Tjemsland
Kundeseminar April 2014, Nytt i CorePublish
Kundeseminar April 2014, Nytt i CorePublish
CoreTrek
OOCSS e 脱lsk
OOCSS e 脱lsk
FINN.no
Objektorientering og design av kode
Objektorientering og design av kode
Rune Sundling
Web 2 0 gjennomf淡ring av prosjekter i skoleportalen
Web 2 0 gjennomf淡ring av prosjekter i skoleportalen
atso0701
NTNUs bruk av Feide.
NTNUs bruk av Feide.
Senter for IKT i utdanningen, redaksjon
HTML5 - en int teori
HTML5 - en int teori
Dag Tjemsland
Intro to Azure DevOps
Intro to Azure DevOps
AudunSolemdal
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Geodata AS
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
leiftorger
Introduksjon til Spring Boot
Introduksjon til Spring Boot
Henrik Schwarz
Digital Eksamen - Integrasjon - SUHS 2014
Digital Eksamen - Integrasjon - SUHS 2014
Snorre L淡v奪s
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Frontkom
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Henrik Akselsen
BK2011 Utvikling av lette webapplikasjoner i java script og html
BK2011 Utvikling av lette webapplikasjoner i java script og html
Geodata AS
Responsiv design og Bootstrap 3
Responsiv design og Bootstrap 3
Morten Bergset
Nnug angular
Nnug angular
fnakstad
The Client Strikes Back
The Client Strikes Back
Magnus Green
Aud Marie Hauge, Epinova: Innledning til universell utforming p奪 web
Aud Marie Hauge, Epinova: Innledning til universell utforming p奪 web
Dag Tjemsland
Kundeseminar April 2014, Nytt i CorePublish
Kundeseminar April 2014, Nytt i CorePublish
CoreTrek
OOCSS e 脱lsk
OOCSS e 脱lsk
FINN.no
Objektorientering og design av kode
Objektorientering og design av kode
Rune Sundling
Web 2 0 gjennomf淡ring av prosjekter i skoleportalen
Web 2 0 gjennomf淡ring av prosjekter i skoleportalen
atso0701

Angular Fra hello world til en fullverdig app

Editor's Notes

  • #5: Toveis data bindingen noe som bare fungerer og sparer masse kode. Det er spesielt via ngmodel direktivet at man drar nytte av dette. Holder modellen i sync b奪de i dine controllere og i view. Moduler kan best beskrives som en container. Man vil ikke f奪 et eget namespace, kan f淡re til problemer. Man kan ha moduler inne i andre moduler. Det betyr selv om man har to kontrollere i forskjellige moduler, s奪 vil det skape konflikt hvis man gir de samme navn og bruker begge modulene i samme app. Kontrollere viktig i enhver MVC rammeverk. De kan skrives p奪 to forskjellige m奪ter. Med angular 1.1.5 s奪 begynte det 奪 komme st淡tte for controller as syntax, men det var ikke f淡r versjon 1.2 at det ble skikkelig integrert. Lettere 奪 skrive god kode med controller as syntaxen.Noe som skiller angular fra de andre rammeverkene er directives. Brukes for 奪 lage et interface mot DOM, enten n奪r du vil ha en widget, en HTML oppf淡rsel eller en wrapper for f.eks. jquery.Direktiv lar deg lage egne komponenter som kan gjenbrukes overalt i l淡sningen. Angular har mange nyttige direktiv i sitt bibliotekt, men enhver l淡sning i litt st淡rre skala vil p奪 et eller annet tidspunkt m奪tte skrive sine egne. Ypperlig for kode reuse. Serviceer i hovedsak kun et objekt med metoder og properties som kan gjenbrukes. AngularJs kommer med mange services og noen blir ofte brukt. En app trenger ikke 奪 bli stor f淡r man kommer til et punkt der man m奪 begynne 奪 skrive sine egne services. Perfekt for 奪 samle forrtningslogikk i en beholder og for reusability. Services er singeltons. I Angular s奪 kobler man sammen kontrollere og services med dependencyinjection, det betyr at n奪r man lager en kontroller, s奪 kan man spesifisere hvilke services man har behov for.
  • #6: En grei plass 奪 starte hvis man kun skal lage en veldig enkelapp kan v脱re AngularSeed, kan enten installere via git eller Nuget. Den promoterer ikke best practises og b淡r kun sees p奪 for 奪 l脱re seg det mest basice.HotToweler en mer komplett template, har en annen struktur som baserer seg p奪 features. Her samler man filene basert p奪 hvilken feature det er del av, har b奪de services, kontrollers og templates i samme mappe. Du f奪r ogs奪 med en veldig grei eksempel p奪 en app. Installeres via nuget.Ng-boilerplateer i samme gaten, st淡rre community rundt seg. Installere via git og bower. M奪 ha node. Kommer med tester ferdig konfigurert til 奪 kj淡re med Karma. Kj淡r grunt for 奪 pakke sammen app.MEAN er en annen starter template, baser seg p奪 Mongo, Express, Angular og Node. Den er ikke feature basert, men samler alle kontrollere i en mappe osv Installer via node.http://mean.io/Sidewaffle, det er ikke en boilerplate, men en extension til visual studio som gir deg templates for controllers, modules, directives og services.Bower er en package manager for web, ala nuget. Installeres via node npm, kan installere githubrepos eller bower pakker. Finnes mange pakker for angular.Man kan finne mange ferdig lagede moduler p奪 ng-modules. Ligger over 400 angular moduler klar til bruk.
  • #7: Filstruktrur. Snakket litt om det p奪 forrige slide. Og her m奪 man se an st淡rrelsen p奪 prosjektet. I mange tilfeller s奪 vil en struktur der man skiller p奪 kontrollere og servicesosv fungere, i st淡rre prosjekter kan det hende at feature strukturen er bedre og for veldig store prosjekter kan man ogs奪 ha et niv奪 men subfeatures.Moduler er en annen m奪te 奪 bokse inn st淡rre prosjekter. Kan samle kontrollere og services i som h淡rer sammen i en modul. Gj淡r det ogs奪 mulig 奪 gjennbruke moduler i andre prosjekter uten at man trenger 奪 hente inn en hel app. Modulere kan isolere komponenter og gj淡r det enklere 奪 teste. Man kan f.eks. lage en modul per direktiv slik at man kun trenger 奪 hente inn den moduelen for 奪 kj淡re en test.I prosjekter med masse funksjonalitet s奪 er det lett at man f奪r store fete kontrollere, her gjelder samme prinsippene som i andre mvc rammeverk, pr淡v 奪 hold de s奪 tynne som mulig. Det er flere muligheter man kan l淡se dette, f.eks. med mixins, men det beste valget er og da er det 奪 trekke ut mest mulig i services.Gi 束namespace損 til direktiv og kontrollere slik at de ikke kolliderer med andre. Angular sine direktiv har ng-forran seg. Hvis man har to direktiv med samme navn vil de begge kj淡re, noe som kan gi merkelig resultat hvis man ikke er klar over dette.
  • #8: Vanlig feilmeldingen, det skjer typisk hvis man har en watch p奪 noe som igjen kan bli oppdatert etter en digest. Slik at angular aldri blir ferdig med 奪 kj淡re digest da noe altid er dirty.Dette er en feil man kan lett dukke bort. Og skjer hvis man pr淡ver 奪 kalle en apply mens en digestphaseallerede er i gang. Man kan enten foreta en sjekk om man er i en phaseosv.https://github.com/yearofmoo/AngularJS-Scope.SafeApplyJavascript sin garbagecollectionfungererikkep奪 same m奪tesom I feks c#. Og man m奪 man selvpassep奪 奪 frigj淡re ting som ligger p奪 scope n奪r de ikkeerlengrebehov for. Vi varn淡tttil 奪 g奪gjennomv奪rkode for vi s奪 at appenv奪rspistemerogmeravminnet. Debugging I angular kanv脱re en pain. V脱rflinktil 奪 brukelogtil 奪 loggefeil.Minification. Noe er lett 奪 glemme, man sitter 奪 lager en ferdig app og oppdager dagen man skal g奪 i prod og begynner 奪 minifiserer koden at ingen ting fungerer. Da er det bedre 奪 tenke p奪 det fra dag en. V脱re obs p奪 at flere eksterne moduler ikke har tenkt p奪 dette og skrevet kode som ikke er minifiserbar. Dette er et eksempel p奪 en kontroller, men dette g奪r igjen i de andre delene av angular ogs奪.
  • #9: Vitn奪r man skalbruke link og compileCompile kj淡res f淡r $scope er tilgjengelig og kun en gang, uavhengig av hvor mange direktiv man har av samme sort. Hvis man skal gjenbruke en template mange ganger, s奪 b淡r man g奪 for compile.Link kj淡res en gang per direktiv, derfor b淡r man flytte mest mulig jobb inne i compile steget. Man vil i de fleste tilfeller bruke link, og det vil g奪 helt fint hvis man ikke repeterer det samme direktiv mange ganger.Broadcast og emit brukeshvis man vilsende data fra en controllertil en annen. B奪de broadcast og emit m奪lyttesp奪iden kontrollerensomskalmottaeventen men en $on. broadcast sender en event tilallechild scopes, og b淡runng奪eshvis man erp奪rootscope, da den vilsendeuttilalle scopes. Emit sender oppover via scope hieraki. Man b淡ristedebrukeemittil 奪 kommunsere der determulig. M奪huskep奪 奪 unbindeetter at $scope blir destroyed.var unbind = $rootScope.$on('someComponent.someCrazyEvent', function(){ console.log('foo'); }); $scope.$on('$destroy', unbind); }$watch unng奪 deep watchingObsp奪 watch, $applyBruke digest istede for applyng-if istede for ng-showF脱rrebindinger, ikkenoe dirty checkingng-bind, ng-model sjekkerheeeeletiden, kanvurdere bind-oncep奪 alt man ikketrenger 奪 oppdatereetter at man harpresentertef淡rstegangen.https://github.com/Pasvaz/bindonceBind once kommeri 1.3, man harogs奪 en mellom ting: fast-bind, somer et egetbibliotekskrevetav en p奪 angular teamet.Digest. dirty checking, loopergjennom alt. gj淡r
  • #10: KarmaRasktestrunner basert p奪 jasmin, kan spesifisere hvilke nettlesere den skal kj淡res i, en eller flere.http://karma-runner.github.io/0.8/plus/AngularJS.htmlProtractorE2E test, helt ny. Bygget for angular, kan s淡ke opp elementer etter binding, name osv. Kjapphttps://github.com/angular/protractorBatarangExtension til chrome, bra for 奪 avdekke avhengigheter, hva som sluker minne, identifisere omr奪der man kan forbedre ytelsehttps://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmcojjgiloacoafjmpfkTypescriptVi skriver all v奪r angular kode i typescript, f淡ler at dette gir oss masse, bare det at all kode m奪 kompilere sparer oss for masse tid, raskere til 奪 identifisere bugs. Resharperhar st淡tte for typescript samt web essensial gj淡r det 奪 jobbe med typescript i visual studio smertefritt.http://www.typescriptlang.org/Breeze, alternativ til $http, ligger som et lag mellom din ORM p奪 server siden og din javascript kode. Kan cache resultat fra databasen, odataquerysyntax, passer ypperlig med angular, async, promises.http://www.breezejs.com/Et hvert javascriptprosjket av litt st淡rrelse kan ta nytte av underscore. Gir oss Ecmascript 5 funksjoner der det er st淡ttet, og en fallback der det ikke er. Gj淡r jobbing mot collections til en enkel sak.http://angular-ui.github.io/Angular UI har flere moduler som kan f奪 deg kjapt oppe 奪 g奪 med grensnitt kodene. Har en egen pakke med Bootstrap komponenterhttp://angular-ui.github.io/
  • #11: http://www.egghead.io/http://pluralsight.com/8 kurs for angularhttps://github.com/jmcunningham/AngularJS-Learning?source=chttp://www.ng-newsletter.com/