Devuelva todos los atributos (campos) en una capa de elementos para un PopupTemplate – ArcGis Javascript.
¿Existe una forma de devolver todos los atributos (campos) en una capa de entidades para una PopupTemplate, sin declarar todos ellos en el objeto fieldInfos
en Angular?
.ts
const template = {
title: "{NAME} en {COUNTY}",
content: ,
fieldInfos: fieldInfos
};
const layer = new FeatureLayer({
url: this.featureLayerUrl,
visible: true,
popupTemplate: template
});
var fieldInfos = layer.map(layer.fields, function(field){
return {
"fieldName": field.name,
"label": field.alias,
"visible": true
};
});
webmap.add(layer);
.html
<!-- Map Div -->
<div #mapviewnode=""></div>
Estoy utilizando arcgis-js-api versión 4.2.1.
Pero cuando uso este ejemplo, funciona. (Pero quiero establecer estos campos dinámicamente).
const fields = [{
name: "NAME",
alias: "Nombre",
type: "string"
}, {
name: "County",
alias: "Condado",
type: "string"
}];
const config = {
fields: fields,
title: "Terreno del Condado"
};
davy.ai
Sí, hay una forma de devolver todos los atributos (campos) en una capa de entidades para una PopupTemplate sin declarar todos ellos en el objeto
fieldInfos
en Angular. Una forma de lograr esto es utilizando la propiedadFeatureLayer.source
para obtener el objetoLayerSource
. A partir de ahí, puedes acceder a la propiedadLayerSource.fields
, que devuelve una matriz de objetosField
que representan el esquema de atributos de la capa de entidades. Luego puedes recorrer esta matriz de campos y crear dinámicamente la matriz fieldInfos para la PopupTemplate estableciendo las propiedadesfieldName
,label
yvisible
de forma dinámica.Aquí tienes un ejemplo de cómo puedes lograr esto:
// Obtén el LayerSource de la capa de entidades
const layerSource = layer.source;
// Obtén los campos desde el LayerSource
const fields = layerSource.fields;
// Crea una matriz vacía para almacenar los fieldInfos
const fieldInfos = [];
// Recorre los campos y crea un objeto fieldInfo para cada campo
fields.forEach(field => {
// Establece el fieldName como el nombre del campo
const fieldName = field.name;
// Establece el label como el alias del campo
const label = field.alias;
// Establece visible como true para mostrar el campo en la PopupTemplate
const visible = true;
// Crea el objeto fieldInfo y agrégalo a la matriz fieldInfos
const fieldInfo = { fieldName, label, visible };
fieldInfos.push(fieldInfo);
});
// Crea la PopupTemplate con los fieldInfos dinámicos
const popupTemplate = {
title: “{NAME} en {COUNTY}”,
content: “”,
fieldInfos: fieldInfos
};
// Crea la capa de entidades con la PopupTemplate dinámica
const layer = new FeatureLayer({
url: this.featureLayerUrl,
visible: true,
popupTemplate: popupTemplate
});
// Agrega la capa al mapa web
webmap.add(layer);
En este ejemplo, primero obtenemos el
LayerSource
de la capa de entidades accediendo a la propiedadsource
del objetoFeatureLayer
. Luego obtenemos los campos de la capa de entidades accediendo a la propiedadfields
delLayerSource
. Luego recorremos los campos utilizando el métodoforEach
y creamos un objetofieldInfo
para cada campo. Establecemos la propiedadfieldName
como el nombre del campo, la propiedadlabel
como el alias del campo y la propiedadvisible
como true para mostrar el campo en la PopupTemplate. Luego agregamos cada objetofieldInfo
a la matrizfieldInfos
. Finalmente, creamos el objetoPopupTemplate
con la matrizfieldInfos
dinámica y creamos laFeatureLayer
con laPopupTemplate
dinámica. Luego agregamos la capa al mapa web.