es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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"
};
Tags:  , , , ,

Answer

  1. Avatar for 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 propiedad FeatureLayer.source para obtener el objeto LayerSource. A partir de ahí, puedes acceder a la propiedad LayerSource.fields, que devuelve una matriz de objetos Field 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 propiedades fieldName, label y visible 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 propiedad source del objeto FeatureLayer. Luego obtenemos los campos de la capa de entidades accediendo a la propiedad fields del LayerSource. Luego recorremos los campos utilizando el método forEach y creamos un objeto fieldInfo para cada campo. Establecemos la propiedad fieldName como el nombre del campo, la propiedad label como el alias del campo y la propiedad visible como true para mostrar el campo en la PopupTemplate. Luego agregamos cada objeto fieldInfo a la matriz fieldInfos. Finalmente, creamos el objeto PopupTemplate con la matriz fieldInfos dinámica y creamos la FeatureLayer con la PopupTemplate dinámica. Luego agregamos la capa al mapa web.

Comments are closed.