arcgis api for javascript: building apps with angular · 2020-04-30 · javascript" angular...

25
ArcGIS API for JavaScript: Building apps for Angular ANDY GUP ALLISON DAVIS @agup @araedavis

Upload: others

Post on 05-Jul-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

ArcGISAPIforJavaScript:BuildingappsforAngularANDYGUP ALLISONDAVIS

@agup @araedavis

Page 2: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

What'stheplantoday?LearnhowtouseArcGISAPIforJavaScriptwithAngularCLIArcGISAPIforJavaScriptmoduleswithesri-loaderAsyncpatternsAngularComponentDevKit(CDK)ServicesRoutingStatemanagementArcGISAPIforJavaScriptmoduleswithwebpack

Page 3: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

Angular6+

ArcGISAPIforJavaScript4.x

https://github.com/Esri/angular-cli-esri-map

Page 4: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

Gettingstarted1.Downloadourrepo

2.FollowalongasweworkwithAngularsampleapps

./sample_apps/app-scaffolding

./sample_apps/esri-loader

...andmore...

https://github.com/andygup/angular-plus-arcgis-javascript-ds2020

Page 5: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

Basicbuildingblocks

AngularCLI

"esri-loader"

esri­map.component.ts

AppScaffolding

Page 6: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

Reliablyload(orlazyload)ArcGISmodulesusingourAMDloader

ControlwhichArcGISmoduleswhen/whereyouwant,àlacarte

It'sEASYandverylightweight

esri-loader

Sampleapplication

Page 7: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

esri-loaderimportloadModulesfrom'esri­loader';//`loadModules`dynamicallyinjectsa<script>tagontothepage

//UsePromise­basedpatternloadModules(['esri/Map','esri/views/MapView','esri/Graphic']).then(([EsriMap,EsriMapView,Graphic])=>//AnyArcGISJavaScriptcodehere);

//Or,useasync/awaitpatternasyncinitializeMap()const[Map,MapView,Graphic]:any=awaitloadModules(['esri/Map','esri/views/MapView','esri/Graphic]).catch(err=>console.error('ArcGIS:',err);

Page 8: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

:"atypedsupersetofJavaScriptthatcompilestoplainJavaScript"

AngularusesTypeScriptasaprimarylanguageforappdevelopment

EsriprovidestypedenitionsfortheArcGISAPIforJavaScript:

AdditionalTypeScriptresources:

Typesforarcgis-js-apiTypeScript

npminstall­­save@types/arcgis­js­api

Angular'sTScongguideEsri'sTypeScriptsetupguide

Page 9: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

AsynchronousOperationsThreewaystomanageoutofprocess,outofsequenceoperations:

PromisesCustomEvents

RxJSObservables

Page 12: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

RxJSandObservables(ReactiveExtensionsforJavaScript)-alibraryforreactive

programming

AngularusesobservablesviaRxJStohandlemanycommonasyncoperations:

Underthehood,

RxJS

HTTPReactiveforms

Router

AngularcustomeventsextendstheRxJSSubject

Page 13: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

Async:Observablesthis.formSubscription=this.wonderForm.valueChanges.subscribe(value=>//dosomethingcoolwithourupdatedformvalue!)

//don'tforgettocleanupanysubscriptionsngOnDestroy()this.formSubscription.unsubscribe()

Page 14: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

AngularComponentDeveloperKit(CDK)

AuthoredbytheAngularteamImplementscommoninteractionpatternsandcomponentsUnopinionatedaboutpresentation

builtontopofCDKAngularMaterial

Page 15: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

AccessibilityandresponsivenessworkoutoftheboxDevelopershavefullcontrol-customstyles,sorting,paginationcanbeaddedontopTabletemplateanddatasourceexistindependentlyofeachother

AngularCDKdemo

Page 16: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

AngularStateManagementApplicationstateComponentstateSharedstateRouterstate

Ohsomanychoices...!

Page 17: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

NeedtomaintainstateaswechangeroutesCanuseaserviceandRxJStomaintainthestate

SimplemapstatewithRxJS

Page 18: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

Scalableapproachtomaintainingapplicationstate

NgRxDataStore

Page 19: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

Angular+@arcgis/webpack-plugin

Angular8and9ArcGISAPIforJavaScript4.7+onlyCongurewebpackusingbuildersangular-builders/custom-webpack

https://github.com/Esri/angular-cli-esri-map/tree/arcgis-webpack-angular

https://www.npmjs.com/package/@angular-builders/custom-webpack

Page 20: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

@arcgis/webpack-plugin

@angular-builders/custom-webpack

Customizebuildcongwithoutejectingwebpack//angular.json­customconfiguration"build":"builder":"@angular­builders/custom­webpack:browser","options":"customWebpackConfig":"path":"./extra­webpack.config.js",...

Page 21: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

extra-webpack.cong.jsconstArcGISPlugin=require('@arcgis/webpack­plugin');/***ConfigurationitemsdefinedherewillbeappendedtotheendoftheexistingwebpaCLI.*/module.exports=plugins:[newArcGISPlugin()],node:process:false,global:false,fs:"empty",devtool:'eval'

Page 22: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

InitializetheMapimportMapfrom"esri/Map";importMapViewfrom"esri/views/MapView";ngOnInit()this._map=newMap(basemap:this._basemap);this._view=newMapView(container:this.mapViewEl.nativeElement,map:this._map);

Page 23: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

WorkingwithsecureservicesDOMException:Failedtoexecute'importScripts'on'WorkerGlobalScope'

https://github.com/Esri/arcgis-webpack-plugin#usage

Page 25: ArcGIS API for JavaScript: Building Apps with Angular · 2020-04-30 · JavaScript" Angular uses TypeScript as a primary language for app development Esri provides type denitions

ThankyouANDYGUP

ALLISONDAVIS

@agup

@araedavis