Provides the logic for the Popup widget, which allows users to view content from feature attributes. Popups enhance web applications by providing users with a simple way to interact with and view attributes in a layer. They play an important role in relaying information to the user, which improves the storytelling capabilities of the application.
All Views contain a default popup. This popup can display generic content, which is set in its title and content properties. When content is set directly on the Popup instance it is not tied to a specific feature or layer.
Popups can also contain actions that act like buttons, which when clicked execute a function defined by the developer. By default, every popup has a "Zoom to" action that allows users to zoom to the selected feature. See the actions property for information about adding custom actions to a popup.
Constructors
new PopupViewModel(properties)
properties Object See the properties for a list of all the properties that may be passed into the constructor. |
Property Overview
Name | Type | Summary | |
---|---|---|---|
Collection | Collection of Accessor objects. more details | more details | |
String | Node | The content of the popup. more details | more details | |
String | The name of the class. more details | more details | |
Number | The number of selected features available to the popup. more details | more details | |
Graphic[] | An array of features associated with the popup. more details | more details | |
Boolean | Highlight the selected popup feature using the highlightOptions set on the SceneView. more details | more details | |
Point | Geometry used to position the popup. more details | more details | |
Number | The number of promises remaining to be resolved. more details | more details | |
Promise[] | An array of pending Promises that have not yet been fulfilled. more details | more details | |
Graphic | The selected feature accessed by the popup. more details | more details | |
Number | Index of the feature that is selected. more details | more details | |
String | The view model's state. more details | more details | |
String | The title of the popup. more details | more details | |
MapView | SceneView | The view associated with the Popup instance. more details | more details |
Property Details
actionsCollection
Collection of Accessor objects. Each object represents an action that may be executed by clicking the icon or image symbolizing them in the popup. By default, every popup has a
zoom-to
action styled with a magnifying glass icon . When this icon is clicked, the view zooms in four LODs and centers on the selected feature.You may override this action by removing it from the actions Collection or by setting the overwriteActions property to
true
in a PopupTemplate. The order of each action in the popup is the order in which they appear in the actions Collection.The trigger-action event fires each time an action in the popup is clicked. This event should be used to execute custom code for each action clicked. For example, if you would like to add a
zoom-out
action to the popup that zooms the view out several LODs, you would define the zoom-out code in a separate function. Then you would call the customzoom-out
function in the trigger-action event handler. See the sample code snippet below for more details on how this works.Actions are defined with the properties listed in the Action class.
- See also:
Example:// Defines an action to zoom out from the selected feature var zoomOutAction = { // This text is displayed as a tooltip title: "Zoom out", // The ID by which to reference the action in the event handler id: "zoom-out", // Sets the icon font used to style the action button className: "esri-icon-zoom-out-magnifying-glass" }; // Adds the custom action to the popup. view.popup.viewModel.actions.push(zoomOutAction); // The function to execute when the zoom-out action is clicked function zoomOut() { // Zoom out two levels (LODs) view.goTo({ center: view.center, zoom: view.zoom - 2 }); } // This event fires for each click on any action view.popup.viewModel.on("trigger-action", function(event){ // If the zoom-out action is clicked, fire the zoomOut() function if(event.action.id === "zoom-out"){ zoomOut(); } });
The content of the popup. When set directly on the Popup, this content may only be static and cannot use fields to set content templates. To set a template for the content based on field or attribute names, see PopupTemplate.content.
- See also:
Example:// This sets generic instructions in the popup that will always be displayed // unless it is overridden by a PopupTemplate view.popup.viewModel.content = "Click a feature on the map to view its attributes";
declaredClassStringreadonly
The name of the class. The declared class name is formatted as
esri.folder.className
.featureCountNumberreadonly
The number of selected features available to the popup.
Default Value: 0featuresGraphic[]
An array of features associated with the popup. Each graphic in this array must have a valid PopupTemplate set. They may share the same PopupTemplate or have unique PopupTemplates depending on their attributes. The content and title of the poup is set based on the
content
andtitle
properties of each graphic's respective PopupTemplate.When more than one graphic exists in this array, the current content of the Popup is set based on the value of the selected feature.
This value is
null
if no features are associated with the popup.Example:// When setting the features property, the graphics pushed to this property // must have a PopupTemplate set. var g1 = new Graphic(); g1.popupTemplate = new PopupTemplate({ title: "Results title", content: "Results: {ATTRIBUTE_NAME}" }); // Set the graphics as an array to the popup instance. The content and title of // the popup will be set depending on the PopupTemplate of the graphics. // Each graphic may share the same PopupTemplate or have a unique PopupTemplate var graphics = [g1, g2, g3, g4, g5]; view.popup.viewModel.features = graphics;
highlightEnabledBoolean
Since: ArcGIS API for JavaScript 4.4Highlight the selected popup feature using the highlightOptions set on the SceneView. Currently highlight only works in 3D.
Default Value: truelocationPoint
Geometry used to position the popup. This is automatically set when viewing the popup by selecting a feature. If using the Popup to display content not related to features in the map, such as the results from a task, then you must set this property before making the popup visible to the user.
- See also:
Examples:// Sets the location of the popup to the center of the view view.popup.location = view.center; // Displays the popup view.popup.set("visible", true);
// Sets the location of the popup to the location of a click on the view view.on("click", function(event){ view.popup.viewModel.location = event.mapPoint; // Displays the popup view.popup.set("visible", true); });
pendingPromisesCountNumberreadonly
The number of promises remaining to be resolved.
- See also:
Default Value: 0promisesPromise[]
An array of pending Promises that have not yet been fulfilled. If there are no pending Promises, the value is
null
. When the pending Promises are resolved they are removed from this array and the features they return are pushed into the features array.selectedFeatureGraphicreadonly
The selected feature accessed by the popup. The content of the Popup is determined based on the PopupTemplate assigned to this feature.
selectedFeatureIndexNumber
Index of the feature that is selected. When features are set, the first index is automatically selected.
stateStringreadonly
The view model's state.
Known Values: ready | disabled
Default Value: disabledtitleString
The title of the popup. This can be set generically on the popup no matter the features that are selected. If the selected feature has a PopupTemplate, then the title set in the corresponding template is used here.
Example:// This title will display in the popup unless a selected feature's // PopupTemplate overrides it view.popup.viewModel.title = "Population by zip codes in Southern California";
The view associated with the Popup instance.
Method Overview
Name | Return Type | Summary | |
---|---|---|---|
Removes promises, features, content, title and location from the Popup. more details | more details | ||
Boolean | Indicates whether there is an event listener on the instance that matches the provided event name. more details | more details | |
PopupViewModel | Selects the feature at the next index in relation to the selected feature. more details | more details | |
Object | Registers an event handler on the instance. more details | more details | |
PopupViewModel | Selects the feature at the previous index in relation to the selected feature. more details | more details | |
Triggers the trigger-action event and executes the action at the specified index in the actions array. more details | more details |
Method Details
clear()
hasEventListener(type){Boolean}
Indicates whether there is an event listener on the instance that matches the provided event name.
Parameter:type StringThe name of the event.
Returns:Type Description Boolean Returns true if the class supports the input event. next(){PopupViewModel}
Selects the feature at the next index in relation to the selected feature.
Returns:Type Description PopupViewModel Returns an instance of the popup's view model. - See also:
on(type, listener){Object}
Registers an event handler on the instance. Call this method to hook an event with a listener. See the Events summary table for a list of listened events.
Parameters:type StringThe name of event to listen for.
listener FunctionThe function to call when the event is fired.
Returns:Type Description Object Returns an event handler with a remove()
method that can be called to stop listening for the event.Property Type Description remove Function When called, removes the listener from the event. - See also:
Example:view.on("click", function(event){ // event is the event handle returned after the event fires. console.log(event.mapPoint); });
previous(){PopupViewModel}
Selects the feature at the previous index in relation to the selected feature.
Returns:Type Description PopupViewModel Returns an instance of the popup's view model. - See also:
triggerAction(actionIndex)
Triggers the trigger-action event and executes the action at the specified index in the actions array.
Parameter:actionIndex NumberThe index of the action to execute.
Event Overview
Name | Type | Summary | |
---|---|---|---|
{action: Action} | Fires after the user clicks on an action inside a popup. more details | more details |
Event Details
trigger-action
Fires after the user clicks on an action inside a popup. This event may be used to define a custom function to execute when particular actions are clicked. See the example below for details of how this works.
- See also:
Property:action ActionThe action clicked by the user. For a description of this object and a specification of its properties, see the actions property of this class.
Example:// Defines an action to zoom out from the selected feature var zoomOutAction = { // This text is displayed as a tooltip title: "Zoom out", // The ID used to reference this action in the event handler id: "zoom-out", // Sets the icon font used to style the action button className: "esri-icon-zoom-out-magnifying-glass" }; // Adds the custom action to the popup. view.popup.viewModel.actions.push(zoomOutAction); // Fires each time an action is clicked view.popup.viewModel.on("trigger-action", function(event){ // If the zoom-out action is clicked, then execute the following code if(event.action.id === "zoom-out"){ // The view zooms out two LODs on each click view.goTo({ center: view.center, zoom: view.zoom - 2 }); } });