Learn how to format a pop-up to show
A
In this tutorial, you will use a PopupTemplate to display feature attributes in different ways in a pop-up for three different hosted
Prerequisites
Steps
Create a new pen
- To get started, either complete the Display a map tutorial or
.
Get an access token
You need an
- Go to the Create an API key tutorial and create an
API key with the followingprivilege(s) :
- Privileges
- Location services > Basemaps
- Item access
- Note: If you are using your own custom data layer for this tutorial, you need to grant the
API key credentials access to the layer item. Learn more in Item access privileges.
- Note: If you are using your own custom data layer for this tutorial, you need to grant the
- Privileges
- In CodePen, set the
apiKeyproperty on the globalesriConfigvariable to your access token.var esriConfig = {apiKey: "YOUR_ACCESS_TOKEN",};
To learn about other ways to get an access token, go to Types of authentication.
Add modules
-
In a new
<script>at the bottom of the<body>, use$arcgis.import()to add theFeatureLayermodule.The
ArcGIS Maps SDK for JavaScript is available via CDN and npm, but this tutorial is based on CDN. The$arcgis.importglobal function accepts a module path or array of module paths, and returns a promise that resolves with the requested modules. This function can only be used when working with the CDN; otherwise, use the standard import syntax. To learn more about the SDK’s different modules, visit the References page.24 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");</script>4 collapsed lines</body></html>
Display attributes
The easiest way to display feature PopupTemplate class to define the content with attributes for the Trailheads
-
Before you can progress further, you’ll need to wait for the
viewOnReadymethod to resolve to ensure the Map component is loaded and ready to use.32 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");const viewElement = document.querySelector("arcgis-map");await viewElement.viewOnReady();</script>4 collapsed lines</body></html> -
Create a
popupTrailheadsobject and set thecontentproperty to a custom HTML string that will display information such as trail name and city jurisdiction.32 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");const viewElement = document.querySelector("arcgis-map");await viewElement.viewOnReady();// Define a pop-up for Trailheadsconst popupTrailheads = {title: "Trailhead",content:"<b>Trail:</b> {TRL_NAME}<br><b>City:</b> {CITY_JUR}<br><b>Cross Street:</b> {X_STREET}<br><b>Parking:</b> {PARKING}<br><b>Elevation:</b> {ELEV_FT} ft",};</script>4 collapsed lines</body></html> -
Create a
trailheadsFeatureLayer. Set theurl,outFields, andpopupTemplateproperties before addingtrailheadsto the . ThemapFeatureLayerwill autocast thepopupTemplateto create a class instance of the object.The
outFieldsproperty enables access toattribute data on the client-side.40 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");const viewElement = document.querySelector("arcgis-map");await viewElement.viewOnReady();// Define a pop-up for Trailheadsconst popupTrailheads = {title: "Trailhead",content:"<b>Trail:</b> {TRL_NAME}<br><b>City:</b> {CITY_JUR}<br><b>Cross Street:</b> {X_STREET}<br><b>Parking:</b> {PARKING}<br><b>Elevation:</b> {ELEV_FT} ft",};const trailheads = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads_Styled/FeatureServer/0",outFields: ["TRL_NAME", "CITY_JUR", "X_STREET", "PARKING", "ELEV_FT"],popupTemplate: popupTrailheads,});viewElement.map.add(trailheads);6 collapsed lines</script></body></html> -
Click on the hiker icons to display the pop-up.
Display a chart
You can display different types of charts, also known as media content, in pop-ups. Charts are created by defining the type and fields (attributes) values. Use the PopupTemplate class to define a bar chart that shows the minimum and maximum elevation for the Trails
-
Create a
popupTrailsobject. In thecontentproperty, set thetypetomediathat will display acolumn-chartof minimum and maximum elevations for each trail. Define thefieldInfosarray at the popup template level to format the field names and values to display in the chart.53 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");const viewElement = document.querySelector("arcgis-map");await viewElement.viewOnReady();// Define a pop-up for Trailheadsconst popupTrailheads = {title: "Trailhead",content:"<b>Trail:</b> {TRL_NAME}<br><b>City:</b> {CITY_JUR}<br><b>Cross Street:</b> {X_STREET}<br><b>Parking:</b> {PARKING}<br><b>Elevation:</b> {ELEV_FT} ft",};const trailheads = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads_Styled/FeatureServer/0",outFields: ["TRL_NAME", "CITY_JUR", "X_STREET", "PARKING", "ELEV_FT"],popupTemplate: popupTrailheads,});viewElement.map.add(trailheads);// Define a popup for Trailsconst popupTrails = {title: "Trail Information",content: [{type: "media",mediaInfos: [{type: "column-chart",title: "Trail Elevation",value: {fields: ["ELEV_MIN", "ELEV_MAX"],normalizeField: null,tooltipField: "Min and max elevation values",},},],},],fieldInfos: [{fieldName: "ELEV_MIN",label: "Elevation Minimum",format: {digitSeparator: true,},},{fieldName: "ELEV_MAX",label: "Elevation Maximum",format: {digitSeparator: true,},},],};6 collapsed lines</script></body></html> -
Create a
trailsFeatureLayer. Set theurl,outFields, andpopupTemplateproperties before addingtrailsto the . ThemapFeatureLayerwill autocast thepopupTemplateto create a class instance of the object.55 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");const viewElement = document.querySelector("arcgis-map");await viewElement.viewOnReady();// Define a pop-up for Trailheadsconst popupTrailheads = {title: "Trailhead",content:"<b>Trail:</b> {TRL_NAME}<br><b>City:</b> {CITY_JUR}<br><b>Cross Street:</b> {X_STREET}<br><b>Parking:</b> {PARKING}<br><b>Elevation:</b> {ELEV_FT} ft",};const trailheads = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads_Styled/FeatureServer/0",outFields: ["TRL_NAME", "CITY_JUR", "X_STREET", "PARKING", "ELEV_FT"],popupTemplate: popupTrailheads,});viewElement.map.add(trailheads);// Define a popup for Trailsconst popupTrails = {title: "Trail Information",content: [{type: "media",mediaInfos: [{type: "column-chart",title: "Trail Elevation",value: {fields: ["ELEV_MIN", "ELEV_MAX"],normalizeField: null,tooltipField: "Min and max elevation values",},},],},],fieldInfos: [{fieldName: "ELEV_MIN",label: "Elevation Minimum",format: {digitSeparator: true,},},{fieldName: "ELEV_MAX",label: "Elevation Maximum",format: {digitSeparator: true,},},],};const trails = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trails_Styled/FeatureServer/0",outFields: ["TRL_NAME", "ELEV_GAIN"],popupTemplate: popupTrails,});viewElement.map.add(trails, 0);6 collapsed lines</script></body></html> -
Click on the trails to view a pop-up that contains a bar chart with elevation data.
Display a table
Feature PopupTemplate and fieldInfos classes to display attribute names and values in a table for the Parks and Open Spaces fieldInfos is the ability to format field values in different ways, for example, to show currency or the number of decimal places.
-
Create a
popupOpenspacesobject. In thecontentproperty, settypetofieldsand define thefieldInfosarray.98 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");const viewElement = document.querySelector("arcgis-map");await viewElement.viewOnReady();// Define a pop-up for Trailheadsconst popupTrailheads = {title: "Trailhead",content:"<b>Trail:</b> {TRL_NAME}<br><b>City:</b> {CITY_JUR}<br><b>Cross Street:</b> {X_STREET}<br><b>Parking:</b> {PARKING}<br><b>Elevation:</b> {ELEV_FT} ft",};const trailheads = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads_Styled/FeatureServer/0",outFields: ["TRL_NAME", "CITY_JUR", "X_STREET", "PARKING", "ELEV_FT"],popupTemplate: popupTrailheads,});viewElement.map.add(trailheads);// Define a popup for Trailsconst popupTrails = {title: "Trail Information",content: [{type: "media",mediaInfos: [{type: "column-chart",title: "Trail Elevation",value: {fields: ["ELEV_MIN", "ELEV_MAX"],normalizeField: null,tooltipField: "Min and max elevation values",},},],},],fieldInfos: [{fieldName: "ELEV_MIN",label: "Elevation Minimum",format: {digitSeparator: true,},},{fieldName: "ELEV_MAX",label: "Elevation Maximum",format: {digitSeparator: true,},},],};const trails = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trails_Styled/FeatureServer/0",outFields: ["TRL_NAME", "ELEV_GAIN"],popupTemplate: popupTrails,});viewElement.map.add(trails, 0);// Define popup for Parks and Open Spacesconst popupOpenspaces = {title: "{PARK_NAME}",content: [{type: "fields",fieldInfos: [{fieldName: "AGNCY_NAME",label: "Agency",},{fieldName: "TYPE",label: "Type",},{fieldName: "ACCESS_TYP",label: "Access",},{fieldName: "GIS_ACRES",label: "Acres",fieldFormat: {type: "number",usegrouping: "always",minimumFractionDigits: 2,maximumFractionDigits: 2,},},],},],};6 collapsed lines</script></body></html> -
Create an
openspacesFeatureLayer. Set theurl,outFields, andpopupTemplateproperties before addingopenspacesto the . ThemapFeatureLayerwill autocast thepopupTemplateto create a class instance of the object.130 collapsed lines<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><title>ArcGIS Maps SDK for JavaScript Tutorials: Display a pop-up</title><style>html,body {height: 100%;margin: 0;}</style><script>var esriConfig = { apiKey: "YOUR_ACCESS_TOKEN" };</script><!-- Load the ArcGIS Maps SDK for JavaScript from CDN --><script type="module" src="https://js.arcgis.com/5.0/"></script></head><body><arcgis-map basemap="arcgis/topographic" center="-118.805, 34.020" zoom="13"><arcgis-zoom slot="top-left"></arcgis-zoom></arcgis-map><script type="module">const FeatureLayer = await $arcgis.import("@arcgis/core/layers/FeatureLayer.js");const viewElement = document.querySelector("arcgis-map");await viewElement.viewOnReady();// Define a pop-up for Trailheadsconst popupTrailheads = {title: "Trailhead",content:"<b>Trail:</b> {TRL_NAME}<br><b>City:</b> {CITY_JUR}<br><b>Cross Street:</b> {X_STREET}<br><b>Parking:</b> {PARKING}<br><b>Elevation:</b> {ELEV_FT} ft",};const trailheads = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trailheads_Styled/FeatureServer/0",outFields: ["TRL_NAME", "CITY_JUR", "X_STREET", "PARKING", "ELEV_FT"],popupTemplate: popupTrailheads,});viewElement.map.add(trailheads);// Define a popup for Trailsconst popupTrails = {title: "Trail Information",content: [{type: "media",mediaInfos: [{type: "column-chart",title: "Trail Elevation",value: {fields: ["ELEV_MIN", "ELEV_MAX"],normalizeField: null,tooltipField: "Min and max elevation values",},},],},],fieldInfos: [{fieldName: "ELEV_MIN",label: "Elevation Minimum",format: {digitSeparator: true,},},{fieldName: "ELEV_MAX",label: "Elevation Maximum",format: {digitSeparator: true,},},],};const trails = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Trails_Styled/FeatureServer/0",outFields: ["TRL_NAME", "ELEV_GAIN"],popupTemplate: popupTrails,});viewElement.map.add(trails, 0);// Define popup for Parks and Open Spacesconst popupOpenspaces = {title: "{PARK_NAME}",content: [{type: "fields",fieldInfos: [{fieldName: "AGNCY_NAME",label: "Agency",},{fieldName: "TYPE",label: "Type",},{fieldName: "ACCESS_TYP",label: "Access",},{fieldName: "GIS_ACRES",label: "Acres",fieldFormat: {type: "number",usegrouping: "always",minimumFractionDigits: 2,maximumFractionDigits: 2,},},],},],};const openspaces = new FeatureLayer({url: "https://services3.arcgis.com/GVgbJbqm8hXASVYi/arcgis/rest/services/Parks_and_Open_Space_Styled/FeatureServer/0",outFields: ["TYPE","PARK_NAME","AGNCY_NAME","ACCESS_TYP","GIS_ACRES","TRLS_MI","TOTAL_GOOD","TOTAL_FAIR","TOTAL_POOR",],popupTemplate: popupOpenspaces,});viewElement.map.add(openspaces, 0);6 collapsed lines</script></body></html>
Run the App
In CodePen, run your code to display the map.
Click on different park areas to display a pop-up of a table view with the fields and values you specified. You should be able to click all of the features in the map and view a pop-up. Each pop-up will display feature
What’s next?
Learn how to use additional SDK features and ArcGIS services in these tutorials: