Learn how to format a pop-up to show attributes
A feature layer
In this tutorial, you will use a PopupTemplate to display feature attributes in different ways in a pop-up for three different hosted feature layers
Prerequisites
Steps
Create a new pen
- To get started, either complete the Display a map tutorial or
.
Get an access token
You need an access token
- Go to the Create an API key tutorial and create an API key
An API key is a long-lived access token created using API key credentials. They are valid for up to one year and are typically embedded directly into client applications. with the following privilege(s)Privileges are a set of permissions assigned to ArcGIS accounts, developer credentials, and applications that grant access to secure resources and functionality in ArcGIS. :
- 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
API key credentials are an item that contains the parameters used to create and manage long-lived access tokens for API key authentication. They are a type of developer credential. 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 API key credentials
- 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
ArcGIS Maps SDK for JavaScript, previously known as ArcGIS API for JavaScript, is a developer product for building mapping and spatial analysis applications for the web. 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 attributesPopupTemplate class to define the content with attributes for the Trailheads feature layer
-
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 themapA map is a collection of layers that are displayed in 2D. It is typically composed of a basemap layer and data layers. . TheFeatureLayerwill autocast thepopupTemplateto create a class instance of the object.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 feature layer
-
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 themapA map is a collection of layers that are displayed in 2D. It is typically composed of a basemap layer and data layers. . TheFeatureLayerwill 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 attributesPopupTemplate and fieldInfos classes to display attribute names and values in a table for the Parks and Open Spaces feature layerfieldInfos 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 themapA map is a collection of layers that are displayed in 2D. It is typically composed of a basemap layer and data layers. . TheFeatureLayerwill 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 attributes
What’s next?
Learn how to use additional SDK features and ArcGIS services in these tutorials: