[PDF] Migrating an AngularJS App to Angular





Previous PDF Next PDF







DéjàVu: A Map of Code Duplicates on GitHub

Code duplication is one such factor. For example if the dataset consists of projects that have hundreds and thousands of duplicate projects that are part of 



angular-in-action.pdf

Angular 5 and above and going forward



Esri

Angular sample apps ./sample_apps/app-scaffolding ./sample_apps/esri-loader ...and more... https://github.com/andygup/angular-plus-arcgis-javascript-.



Migrating an AngularJS App to Angular

6.1 Add Header Element to App Component Template . . . . . . . . 21 The final code for our Angular 2+ app can be cloned from the ng2-dinos GitHub.



Declarative Assembly of Web Applications from Predefined Concepts

Oct 23 2019 projects for a web programming course were replicated in. Déjà Vu. ... very thin layer atop Angular's template syntax. When an app developer ...



So you thought you were safe using AngularJS. . . . Think again!

Jul 27 2017 Slightly modified CSP bypass example from http://sirdarckcat.github.io/csp/angular.html#f. Assume this content is injected on page.



WEB-BASED PLATFORM FOR MANAGING IMAGE BIOMARKERS

The deliverables of this project are a relational data model 2.3.5 GitHub . ... Figure 3-1 Example of a feature set extraction file .



DéjàVu: A Map of Code Duplicates on GitHub

Code duplication is one such factor. For example if the dataset consists of projects that have hundreds and thousands of duplicate projects that are part of 

MigratinganAngularJSAppto Angul ar

KimMaida, Auth0Inc.

Version1.3.0,2017

Contents

1In troduction4

1.1Angul arJS1andAngular2+....................4

1.2Migrat evs.Upgrade.........................5

2A ngular1App"ng1-dinos "6

2.1Depe ndencies.............................6

2.2Ins tallandRun"ng1-dinos".....................6

3I ntroducingAngular2App"ng2-dinos"8

3.1Dep endencies.............................8

3.2Ini tializeng2-dinos..........................9

3.3Linti ngandStyleGuide.......................9

4Cu stomizingOurAngular2ProjectforMi gration11

4.1Boots trapCSS............................11

4.2Thir dPartyLibraries........................12

4.3Glob alSCSS.............................13

4.4Updat eAppFileStruc ture.....................15

5A ngular2RootAppCompon ent 16

5.1AppC omponent Template......................17

5.2AppC omponent Styles........................18

5.3AppC omponent TypeScript.....................18

6An gular2HeaderComponent 20

6.1AddHe aderEleme nttoAppComponen tTemplate........21

6.2Header ComponentTempl ate....................22

6.3Header ComponentStyle s......................22

7An gular2ComponentInte ract ion25

7.1Header ComponentTypeS cript...................25

7.2Header Communicationw ithAppComponent...........26

8An gular2Observablesan dDO MProperties29

1

8.1AddO bservablet oAppComponentTypeScript..........29

8.2Add DOMPropert ytoAppCompon entTemplate........31

9An gular2FooterComponen t33

9.1Foote rComponentTypeScr ipt...................33

9.2Foote rComponentTemplat e....................34

9.3Foote rComponentStyles......................34

9.4AddF ootertoAppC omponentTemplate.............34

10Mi gratingAngular2Pages36

10.1Creat eHome,About,and404PageC omponents.........36

10.2Add TitleProv idertoAppModule .................36

10.3AddT itletoPageC omponents...................37

10.4HomeCom ponentT emplate.....................39

10.5AboutC omponentTem plate....................39

10.6404Comp onen tTemplate......................40

11Rou tinginAngular241

11.1Cre ateaRoutingModule ......................41

11.2Impor tRoutingModulein AppModule..............43

11.3Dis playRoutedComponents....................43

11.4Route Navigation...........................44

11.5Route rEvents.............................45

11.6Auto- closeMenuinHeaderComponent..............45

12Cal linganAPIinAngular247

12.1Din osaurAPIDataModel......................47

12.2AddHT TPClient ModuletoAp pModule.............48

12.3GetAP IDatawith DinosSe rvice..................49

12.4Prov idetheDinosServiceinApp Module.............50

12.5Useth eDinosS ervicein HomeComponent............51

12.6Disp layaListofDinosaurs.....................52

13Di splayDinoCards55

13.1Dino CardComponentTy peScript .................55

13.2Dino CardComponentTe mplate..................56

13.3Disp layDinoCardinHomeComponen t..............56

14Mi gratingAngular1Filteringt oAngular258

14.1NoFil ter orOrderByPipes.....................58

14.2Creat eaFilterService ........................59

14.3UseAngu lar2Fil terServiceto Se arch...............60

14.3.1Filter inHomeComponentTypeSc ript...........60

14.3.2Filter inHomeComponentTemplat e............62

14.3.3Filter inHomeComponentStyles ..............63

15Mi gratingDetailComponenttoA ngular265

2

15.1Routi ngwithParameters......................65

15.2Link ingtoRouteswithParame ters.................66

16Cal lingtheAPIforDataby ID67

16.1Cre ateaDinoDetailsMo del ....................67

16.2AddHT TPObservab letoGetDi nosaurbyID..........68

16.3Using APIDatainDetail Compone nt...............69

16.3.1DetailC omponentTypeScrip t...............69

16.3.2DetailC omponentTemplate................70

16.3.3DetailC omponentStyles..................72

17Load ingStateforAPICall s74

17.1Loadin gImageAsset.........................74

17.2Loading ComponentTypeS cript..................74

17.3AddLoad ingCompone nttoAppModule .............75

17.4AddLoad ingComponen ttoHomeComponen t..........76

17.4.1ImplementLoadingFunctionalityin HomeComponent

TypeScript..........................76

17.4.2ImplementLoadingFunctionalityin HomeComponent

Template...........................77

17.5AddLoad ingCompone nttoDetailComp onent..........79

17.5.1ImplementLoadingFunctionalityin DetailComponent

TypeScript..........................79

17.5.2ImplementLoadingFunctionalityin DetailComponent

Template...........................80

17.5.3Remove "Loading..."TextfromInd exHTML......80

18Com pletedMigration82

18.1Refac toringSuggestions.......................82

19B onus:Authenticate anAngularAppandNodeAPIwith

Auth083

19.0.1Featur es............................84

19.0.2SignUpfor Auth0......................85

19.0.3SetUpa ClientApp.....................85

19.0.4SetUpan API........................85

19.0.5Depend enciesandSetup...................85

19.0.6Authen ticationService....................87

19.0.7MakingA uthenticatedAPIRe quests............90

19.0.8FinalTou ches:RouteGuar dandProfilePage.......90

19.0.9MoreRes ources........................91

20Con clusion92

3

Chapter1

Introduction

ManyAngularJ S1.xdevelopersareinte reste dinAngular2+,butthemajor di erencesbetweenversion s1and2+aredauntingwhenwe havesomany AngularJS1appsalreadyinp rod uctionormai ntenance.Learnhowt omigrat e ar eal-worldAngularJSapptoafreshAn gular2+build:what'sth esame, what'ssimilar,andw hat'scompletelydi erent.Afterthistutor ial,youshould beprep aredtotackleyourownmigrat ionsaswe llasnewAngular2+pro jects. Thefinalcod eforourAngular 2+appcanbeclone dfromth eng2-dinosGitHub repo. Note:TheBrandingGuidelinesforAngul arstatethatversion1 .xshouldbe referredtoas"Angular JS",wher easall releasesfromversion2anduparename d "Angular".Thismigrationarticl ewillcontinu etouse"Angular1"toreferto AngularJS(1.x)and"Angula r2"torefertoAngul ar(2andup )inorderto clearlydi erentiatetheframeworksan dreduceco nfusion.

1.1AngularJS 1andAngular2+

AngularJS1.xhasbeen afrontrunneram ongJ avaScriptframeworksoverthe pastfewyear s.Thereare thousandsofproduc tionsitesandappsbuiltwith Google's"superheroicMVW framework"andmanym orestillin developme nt.In mid-September2016,Angular2wasrele ased afteralengthyp eri odofbetasand releasecandidates.Angu lardevelopersknewthiswascoming andthatAngular

2wasafu llr ewriteandplatf ormimplementation,notanin cremen talupdate.

WhileAngulardevelop erswereandareeagertotry Angular2+, adoptioncan bechall enging.ManyofushaveAngular1appsind evelopment orm aintenan ce andaren' tinapositiontomigr atethe mto Angular2duetotightdead lines, 4 budgetconstraints, clientormanagementreluctance,etc.An gular1isstillbeing maintainedunderthe"AngularJS" monikerandAngular 1appsarenotabout togoaw ay. Note:Angular2+usesSemVer(S emantic Versioning) .Th ismeansthatu nlike Angular1,therewillno longerb ebreakingchangesi npointreleas es.There will notbeanA ngular3 ;inste ad,Angular4willbethen extm ajorreleaseinorder tocorr elatetoversion4oftheAngular router .

1.2Migrat evs.Upgrade

Angular2isapowe rfu landatt ract iveplatform.Manydevelopersw illhav etheir firstopportuni tytodiginwhentheytacklemigrat inganex istingAngul ar1 apptoAngu lar2.Att histime,upgradingtheoriginal codebaseisextrem ely di cult:Angular2isnotan iterationofAngul ar1.M ovingb etwee nth emis morestraigh tforwardwhenmigratingtoafre shb uildthattranslate sthesame featuresonthenewplatform. We'llwalkthroughth eprocess ofmigratinganAngular1ap ptoAngular2. OurAngular1p rojectisrelat iv elysmallbutitrepresent sascal able,real-world SinglePageApplication .Afterf ollowingthistutorial,youshouldh aveabetter understandingofhowtogetstartedwithAngular2 andh owfeatures from

Angular1translat eto Angular2.

Thistutori alassumesyouarecomfortabl edevelopingappswith An- gularJSversion1.x.Ifyou'r elookingtolearnAngu lar2withoutanAngular

1com parison,checkoutresourcesli keAngular2Authent icat ionandGetting

StartedwithAngular2.

5

Chapter2

Angular1App"ng1-dinos"

OurAngular1ap piscalledng1-dinos.Th ecodeisa vailableattheng1-dinos

GitHubrepo.It hasthef ollowin gfeatures :

•Routing(dinosaurslist ingwithindividualdetailpage s) •Filtering(searchfordinosaursby name) •CallsanexternalNodeAPItogetdi nosaurdat a •SCSSandBootstrapCSS •Customo!-canvasnavigation •Metadatafactorytoprov idedynamics •Gulpbuild •GuidedbytheAngular1StyleG uid e •Scalability <h4>2.1Depende ncies</h4> Followtheinstru ctionsonthe followingsitestoinstallthesedepen den cies: •NodeJSwithnpm •Gulp(installgloballywithnpminstall-g gulp) We'llalsoneedto clonesample-nodeserver-dinos.Th islocalNodeser ver willprovidet heexternalAPIforbothourng1- dinosandng2-d inosapps.Follow theinstru ctionsinthesample-nodeserver-dinosREADMEtogetit install edand runningonhttp://localhost:3001. <h4>2.2Installa ndRun"ng1-dinos"</h4> <h4>1.Cloneng1-dinosfromGitHub toalocaldirectory ofyourch oos ing.</h4> 6 <h4>2.Runnpminstallfromtheroot directory.</h4> <h4>3.Rungulptoser vetheapplication(r unslocall yonhttp://localhost:8000).</h4> Onceyouhaven g1-dinosan dtheNodeAPIrun ning,theappshouldlook like thisinth ebrows er: <h3>Figure2.1:Angular1ng1- dinoshom eview</h3> Important:Takesometi metofamili arizewiththe filestr ucture,code,and features.Wewon'tbemakingany changestothi sapplication,bu tit'simportant togetcom fortable withitbecauseeverythingw edoinourAngular2 appwil l beamigr ation ofng1-dinos. 7 <h3>Chapter3</h3> <h3>IntroducingAngular2App</h3> "ng2-dinos" Ourmigrated Angular2applicationwill becalledng2-dinos.Th efullsourc e codeforthecomp letedap pcanbeclon edfromtheng2-dinosGitHubrepo.This appwill usethesameNode API.Fromau ser'spers pective, wewantng2-di nos tobein distin guishablefromng1-dinos.Underthehood,we'llrewriteth eappto takeadvantage ofthepowerfulnew fe aturesofAngul ar2. Angular2bringsin sev eraltechnologiesth atng1-din osdoesnottakeadvantage of.Inst eadofaGulpbuild,we'l lu set heAngularCLItosetu pandserve ng2-dinos.We'regoingtowrit etheappusingTypeScriptandES6whichwill betrans piledbytheAngularCLI. We'llfollowtheAngular2StyleGu ide forthe mostpart,wi thafewmin or exceptionsregardingfilestructu re.Forthistutorial,wewan ttopreser veas muchofacorrel ation wit hng1-dinosaswecan.Thiswillmak eiteasiertofol low themigration offeatures. <h4>3.1Dependenci es</h4> <h3>Youshoul dhaveNodeJSwithnpminstalledalready.</h3> Next,installth eAngularCLIgloballywiththefoll owingcommand: $npminstall -g@angular/cli 8 <h4>3.2Initiali zeng2-dinos</h4> Thefirstth ingwe'lldois initializeournew Angular2appandgetitr unning. We'llusetheAngular CLItogener ateanewpro jectwithSCSS suppor tusing thefollowi ngcommand: $ngnew ng2-dinos--style=scss Nextwecanse rvethe appbyr unningthefollowi ngcommandfr omther oot directoryofournewapp: $ngserve Weshou ldbeabletoviewth esitei nthebrow serathttp://localhost:4200.The appshoul dlooklikethis: <h3>Figure3.1:NewAngular2 appinit ialized</h3> Takealookatt hefi lestruct ure foryournewn g2-dinosapp.Y oumaynotice therearetestfile sandconfi guration,butwewon't covertesting inthis tutorial.If you'dli ketolearnmoreab outtestingAngu lar2,che ckoutTesting intheAn gulardocsandartic leslikeAngular2Testin gIn Depth:Servicesand <h3>ThreeWaystoTest Angular2Componen ts.</h3> <h4>3.3Linting andStyleGuide</h4> TheAngularC LIprovidescod elint ingwithTSLintandCodelyzer.TS Lint providesTypeScriptlinti ngandCodelyzerprovidesTSLintrul esthatadhere totheAngular2StyleGu ide .We canvie wallofth eselintingru lesat 9 ng2-dinos/tslint.json.We canlint ourproj ectusingthe followi ngcom- mand: $nglint Thistutorialfol lowstheStyleGuide andadherestothedefau ltrulesin the TSLintconfigfile.I t'sgoodtolint yourprojectp eriodicallyt omakesure your codeiscleanand freeofl intererrors. Note:TheAngular CLITSLint"eofline":truerulerequiresfilestoend withanewline.Thisisstandardconvention.If youwan ttoavoidlo tsofnewline errorswhenlinting, makesuret hatyourfilesincludethis. 10 <h3>Chapter4</h3> <h3>CustomizingOurAngular2</h3> <h3>ProjectforMigratio n</h3> Nowthatw ehaveawor kingst arterprojectf orou rng2-dinosapp,wewantto restructureitandaddsomelibraries. <h4>4.1Bootst rapCSS</h4> Let'sstartbyadd ingtheBootstrapCSSCDNtoth eng2-dinos/src/index.html file.Wecanalsoad dadefau lt<title>andsome<meta>tags: <!--ng2-dinos/src/index.html--> <!doctypehtml> <html> <head> <metacharset="utf-8"> <title>ng2-dinos 11 Loading... Note:Thecodefo rincludingthe Bootstra pCSScanbefoundatBootstrapCDN -Get tingStarted.We' reusingversio n3.3.7becauseit islateststableat the timeofwritin g.Pleas enotethatifyouupgrad etoversion4.x,therea remajor changestobemind fulof.

4.2ThirdPa rtyLibraries

Theonlythi rdpartyJav aScriptwewantisa custombuildofModernizr.We'll bedoing quiteabitofcop yingandpastingfr omng1- dinossince we 'redoinga migration,soit'sbesttoke epyour localng1-dinospr ojecthandy. Ourminifie d,customModernizrbuildcan befoundatng1-dinos modernizr.min.js.Cr eatethenecessary folderstru ctureinng2-dinos: ng2-dinos |-src/ |-assets/ |-js/ |-vendor/ |-modernizr.min.js AngularCLIusesWe bpackto bundlelocald ependencies,sowewon'tadd Modernizrtoourng2-dinosindexfil e.Inst ead,we' lladdareferencetot he .angular-cli.jsonapp'sscripts: //ng2-dinos/.angular-cli.json "apps":[ "scripts":[ "assets/js/vendor/modernizr.min.js" 12

4.3GlobalSC SS

Weini tializedourprojectwiththe--styles=scssflagsoSC SSiss upportedand aglob alstyles.scssfilehasalread ybeenge nerated.However, it'scurrentl y locatedattherootofthe ng2-dinos/src/folder.Tomaintainasim ilarfil e structurewithng1-dinos,itneed stoliveinng2-dinos/src/assets/scss/ instead. fileintoit .Thenupdateth e.angular-cli.jsonapp'sstylesreference: //ng2-dinos/.angular-cli.json "apps":[ "styles":[ "assets/scss/styles.scss" Note:Whenmovingo raddingnewfiles,y ou'lln eedtostopandrestar tthe AngularCLIserver(Ctrl+C,ngserve)t oavoidm odulebuilderro rs.Changes withinfilesarewatched andliverel oaded,butr eorganizingthefiles tructureca n breakthis. Nowlet 'saddsomeglobalSCSSf romng1-di nos.We'll copythefile s andsubd irectoriesfromng1-dinos/src/assets/css/scss/core/to ng2-dinos/src/assets/scss/. Note:Ifyoup aidcloseat tention,you' llnoticewe'vel efto!afo lderinng2- dinos.OurAngular1n g1-dinosap phadacssfolderwithscssinsideit.W e don'tneedthe cssfolderinng2-dinos becaus eoftheAngularCLIWebpack bundling. Whenwe'redon e,ourng2-dinosglobalst ylesfilestru ctures houldlooklikethis: ng2-dinos |-src/ |-assets/ |-scss/ |-partials/ |-_layout.vars.scss |-_responsive.partial.scss |-_base.scss |-_layout.scss |-_presentation.scss |-styles.scss 13 Nowwe'l l@importtheseSCSSfilesin theng2-dinosglob alstyles.scss: //partials @import!partials/layout.vars!; @import!partials/responsive.partial!; //globalstyles @import!base!; @import!presentation!; @import!layout!; RestarttheAngularCLIse rverandourap p'sbackgroundc olorshoul dchange togrey. Thisisavisual indicatorthatou rnewgl obals tylesareworking.I fwe inspectthepage,weshould seetheglobal stylesapplied. Finally,we'llcleanupth e_base.scssfile.Angular2doe sn'tutilize ng-cloak sowe 'llremovetheng-cloakruleset.Afterwards,thisisw hatremains: /*ng2-dinos/src/assets/scss/_base.scss */

BASICS

/*--Cursor--*/ a, input[type=button], input[type=submit], button{ cursor:pointer; /*--Forms--*/ input[type="text"], input[type="number"], input[type="password"], input[type="date"], selectoption, textarea{ font-size:16px;/*foriOS topreventautozoom */ 14

4.4UpdateA ppFileStructure

TheAngularCLI createsallappfil es(mo dules,components,ser vices ,pipes ,etc.) relativetong2-dinos/src/app/.Note thatth eng2-dinosapp hasacomponen t (app.component.ts|.html|.scss|.spec.ts)in thero otofthisfold er.This isourapp 'srootc omponent,butw ewanttomov eitintoasubfoldertokeep ng2-dinosorganized,scalabl e,andcorrelatedwithng1-di nos. Note:Recallthatthistuto rialwon'tco vertesting.The.spec.tsfileshavebeen largelyremovedfrom thesampleng2-dinosrepotomake itsimplert oview.Th e AngularCLIcreatesthese filesautom aticallywhengenerat ingnewarchite cture. Feelfreet okeeptheminyour project andwr itetests.F orbrevity ,theresto f thetutor ialwillnolongermention .spec.tsfiles.Ifyou' reusingthem, justrememberto includethemwheneverma naging files. Let'smovethe app.component[.html|.scss|.ts]filestoanewf older: ng2-dinos/src/app/core/.Theappfolder'sfilestructuresh ouldnowlo oklike this: ng2-dinos |-src/ |-app/ |-core/ |-app.component[.html|.scss|.ts] |-app.module.ts Thisbreaksourb uild.Wecanfixitb yupdati ngtheng2-dinos/src/app/app.module.ts file.Ifyouhave aTypeS cript extensionenabl edi nyourcodeeditororIDE,you shouldseesyntaxh ighlighting whereTypeScrip tdetectsproblems.Weneedto updatethepathtoapp.componentlikeso: //ng2-dinos/src/app/app.module.ts Note:Alwayskeepinmindthat Angula r2isvery interconnected withregard todepen dencyimports.Whenwemo vefiles,webreakreferencesinother places.TheCLItellsus wherethep roblemsarew henwebuild.Ty peScript code hintinginoureditorca nhelpto o.Toaddr esstheissueatitsroo t,wecanu se additional@NgModulesto managed ependencies;youcanl earnmorebyreading UseNgModu letoManageDependenciesinyour Angula r2Apps.

That'sitforsetup !Wecano

ciallystartmigrati ngng1-dinostong2- dinos. 15

Chapter5

Angular2RootApp

Component

Inthe ng1-dinosAngul ar1app,ng-appwasonthe element.This providedAngularcontroloverth e,all owingustodynamicallyupd ate thewithacustomm etad atafactory.InAngular2, ourrootapp componentislocatedinsid ethe<body>.Angu lar2providesa ser vicetomanage page<title>sand weshou ldn'tu sean<html>-levelapprootanymore. Asw esawabo ve,thebod yofourAngular2ng2-dinosindex.htmlfilelooks likethis: <!--ng2-dinos/src/index.html--> <body> <app-root>Loading...</app-root> </body> Incompar ison,thebodyofourAngular1ng1-dinosindex.htmlfilelooksli ke this: <!--ng1-dinos/src/index.html--> <body> <divclass="layout-overflow"> <div class="layout-canvas" nav-control 16 <!--HEADER--> <header id="header" class="header" <!--CONTENT(Angular View)--> <div id="layout-view" class="layout-view" ng-viewautoscroll="true"></div> <!--FOOTER--> <footer id="footer" class="footerclearfix" </div><!--/.layout-canvas--> </div><!--/.layout-overflow--> </body> Thelayoutm arkup,header,cont ent,andfooterchildre nwillnowmovetothe <h4>5.1AppCom ponentT emplate</h4> <h3>Let'sstuboutapp.component.html:</h3> <!--ng2-dinos/src/app/core/app.component.html -->quotesdbs_dbs14.pdfusesText_20</div> <style> .ahover:hover{ background:#efefef; } </style> <div style="padding:5px; font-size:22px;"> <a href="https://pdfprof.com/PDFV2/Documents1/33048/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular project structure example github</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33049/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular projects for practice</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33050/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular projects with source code free download</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33051/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular routing tutorial step by step</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33052/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular sample project git</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33053/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular sample project step by step</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33054/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular sample projects for beginners</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33055/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular service interface naming convention</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33056/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular step by step for beginners</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33057/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular tutorial for beginners 2020</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33058/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular tutorial for beginners learn angular from scratch</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33059/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular tutorial for beginners learn angular from scratch mosh</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33060/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular tutorial for beginners step by step</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33061/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular tutorial for beginners step by step javatpoint</a><br/><br/> <a href="https://pdfprof.com/PDFV2/Documents1/33062/28" style="font-size:27px;padding:0.5%;border:1px solid #aaa;width:99%;display:block;" class="ahover">[PDF] angular tutorial for beginners step by step youtube</a><br/><br/> </div> </div> </div> <div class="left"> <br/> <div style="width:100%;padding:2px;"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1570187411384203" crossorigin="anonymous"></script> <!-- Responsive1 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1570187411384203" data-ad-slot="2836242943" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <br/> <br/> <br/> <br/> <div style="background:#efefef;"><br/></div> </div> <div> <style> .exit-intent-popup { position: fixed; top: 0; left: 0; bottom: 0; right: 0; z-index: 1; background: rgba(33, 33, 33, 0.8); transform: translateY(60%) scale(0); transition: transform 0.3s cubic-bezier(0.4, 0.0, 0.2, 1); } .exit-intent-popup.visible { transform: translateY(0) scale(1); } .newsletter { position: absolute; top: 20%; left: 20%; transform: translate(-20%, -20%); } /* Popup-specific styles */ .newsletter { background: #FFF; padding: 10px; border-radius: 3px; } .close { position: absolute; top: 10px; right: 10px; cursor: pointer; width: 20px; height: 20px; font-size:18px; } </style> <link rel="stylesheet" href="popup.css" /> <div class="exit-intent-popup"> <div class="newsletter"> <span>Nous vous remercions chaleureusement pour votre soutien et votre générosité.</span><br/> <br/> <img src="https://pdfprof.com/PDFV2/6oB.gif" style="max-width:100%;"/> <div style="width:100%;"> <a href="https://www.facebook.com/sharer/sharer.php?u=https://pdfprof.com/PDFV2/Documents1/33047/28/7" rel="nofollow" target="_blank" style="margin-right: 5px; background: #03A9F4; color: white; padding: 1%; font-size:15px; width:46%; ">Share on Facebook</a> <a href="https://api.whatsapp.com/send?text=angular+tutorial+for+beginners+step+by+step+youtube+Download+From++-+https%3A%2F%2Fpdfprof.com%2FPDFV2%2FDocuments1%2F33047%2F28%2F7" rel="nofollow" target="_blank" style="background: #4CAF50; color: white; padding: 1%; width:48%; font-size:15px;">Share on Whatsapp</a> </div> <br/> <span class="close">x</span> </div> </div> <script> /* const CookieService = { setCookie(name, value, days) { let expires = ''; if (days) { const date = new Date(); date.setTime(date.getTime() + (days * 12 * 60 * 60 * 1000)); expires = '; expires=' + date.toUTCString(); } document.cookie = name + '=' + (value || '') + expires + ';'; }, getCookie(name) { const cookies = document.cookie.split(';'); for (const cookie of cookies) { if (cookie.indexOf(name + '=') > -1) { return cookie.split('=')[1]; } } return null; } }; const exit = e => { const shouldExit = [...e.target.classList].includes('exit-intent-popup') || // user clicks on mask e.target.className === 'close' || // user clicks on the close icon e.keyCode === 27; // user hits escape if (shouldExit) { document.querySelector('.exit-intent-popup').classList.remove('visible'); } }; const mouseEvent = e => { const shouldShowExitIntent = !e.toElement && !e.relatedTarget && e.clientY < 10; if (shouldShowExitIntent) { document.removeEventListener('mouseout', mouseEvent); document.querySelector('.exit-intent-popup').classList.add('visible'); CookieService.setCookie('exitIntentShown', true, 30); } }; if (!CookieService.getCookie('exitIntentShown')) { setTimeout(() => { document.addEventListener('mouseout', mouseEvent); document.addEventListener('keydown', exit); document.querySelector('.exit-intent-popup').addEventListener('click', exit); }, 0); } */ </script> <!-- Trigger/Open The Modal --> <!-- The Modal --> <div> <div id="myModal" class="modal"> <!-- Modal content --> <div class="modal-content"> <span class="closeA">×</span> <style> .downlink{ border:1px solid #aaa;color:white;padding:8px;width:98%;color:white;background:green;display:block; } .downlink:hover{ background:blue; cursor:pointer; } </style> <table style="width:80%;"> <tr style="width:100%;"> <td style="width:50%;"><a href="https://pdfprof.com/PDFV2/ShowLink_1.php?vidt=33047&vt=28&links=https%3A%2F%2Fassets.ctfassets.net%2F2ntc334xpx65%2F4I8HgPbZjq4GMMi2SM4mmG%2F8478dd9123d80a91ee2c997ed5c1befa%2Fmigrating-to-angular.pdf" class="downlink" target="_blank">PDF Download</a> </td> <td style="width:45%;"><a href="https://pdfprof.com/PDFV2/Documents1/33047/28/8" class="bblinkss"> Next PDF </a> </td></tr> </table> <iframe id="ppifa" frameBorder="0" width="100%" src="https://pdfprof.com/PDFV2/getFrameTestV3.php?links=https://assets.ctfassets.net/2ntc334xpx65/4I8HgPbZjq4GMMi2SM4mmG/8478dd9123d80a91ee2c997ed5c1befa/migrating-to-angular.pdf&idt=33047&t=28&view=7&url=https://pdfprof.com/PDFV2/Documents1/33047/28/7" style="width:100%;height:90vh;" ></iframe> <script> /* var iframe = document.getElementById("ppifa"); var srcv=iframe.src; var loadingStatus = false; function abc(){ iframe.onload = function () { loadingStatus = true; console.log('ok is loaded iframe'); } if(loadingStatus==false) { iframe.src=srcv; } } abc(); */ </script> </div> </div> </div> <style> body {font-family: Arial, Helvetica, sans-serif;} /* The Modal (background) */ .modal { display: none; /* Hidden by default */ position: fixed; /* Stay in place */ z-index: 1; /* Sit on top */ padding-top: 10px; /* Location of the box */ left: 0; top: 0; width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ background-color: rgb(0,0,0); /* Fallback color */ background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ } /* Modal Content */ .modal-content { background-color: #fefefe; margin: auto; padding: 5px; border: 1px solid #888; width: 90%; } /* The Close Button */ .closeA { color: #aaaaaa; float: right; font-size: 28px; font-weight: bold; background:red; padding:5px; } .closeA:hover, .closeA:focus { color: #000; text-decoration: none; cursor: pointer; } </style> <script> // Get the modal var modal = document.getElementById("myModal"); // Get the button that opens the modal var btn = document.getElementById("myBtn"); // Get the <span> element that closes the modal var span = document.getElementsByClassName("closeA")[0]; // When the user clicks the button, open the modal btn.onclick = function() { modal.style.display = "block"; } // When the user clicks on <span> (x), close the modal span.onclick = function() { modal.style.display = "none"; } // When the user clicks anywhere outside of the modal, close it window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; } } </script> </body> </html>