Componente web

[AEM sin encabezado as a Cloud Service]{class="badge informative"}

Las aplicaciones de ejemplo son una buena manera de explorar las capacidades sin encabezado de Adobe Experience Manager AEM (). AEM Esta aplicación de componente web muestra cómo realizar consultas en el contenido utilizando las API de GraphQL de la interfaz de usuario de la aplicación de datos de uso de consultas persistentes y representando una parte de la interfaz de usuario, todo ello realizado utilizando código JavaScript puro.

AEM Componente web con encabezado sin encabezado

Ver el código fuente en GitHub

Requisitos previos prerequisites

Las siguientes herramientas deben instalarse localmente:

AEM requisitos de

AEM El componente web funciona con las siguientes opciones de implementación de.

Esta aplicación de ejemplo depende de basic-tutorial-solution.content.zip que se va a instalar y de que se hayan implementado las configuraciones de implementación necesarias.

IMPORTANT
AEM El componente web está diseñado para conectarse a un entorno de Publish AEM, pero puede obtener contenido de la fuente de Autor de la aplicación si se proporciona autenticación en el archivo person.js del componente web.

Cómo usar

  1. Clonar el repositorio adobe/aem-guides-wknd-graphql:

    code language-shell
    $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. Vaya al subdirectorio web-component.

    code language-shell
    $ cd aem-guides-wknd-graphql/web-component
    
  3. AEM Edite el archivo .../src/person.js para incluir los detalles de conexión de la:

    AEM En el objeto aemHeadlessService, actualice aemHost para que apunte a su servicio de Publish de.

    code language-plain
    # AEM Server namespace
    aemHost=https://publish-p123-e456.adobeaemcloud.com
    
    # AEM GraphQL API and Persisted Query Details
    graphqlAPIEndpoint=graphql/execute.json
    projectName=my-project
    persistedQueryName=person-by-name
    queryParamName=name
    

    AEM AEM Si se conecta a un servicio de autor de, en el objeto aemCredentials, proporcione las credenciales de usuario local de la cuenta de usuario de la cuenta de usuario.

    code language-plain
    # For Basic auth, use AEM ['user','pass'] pair (for example, when connecting to local AEM Author instance)
    username=admin
    password=admin
    
  4. Abra un terminal y ejecute los comandos de aem-guides-wknd-graphql/web-component:

    code language-shell
    $ npm install
    $ npm start
    
  5. Una nueva ventana del explorador abre la página del HTML estático que incrusta el componente web en http://localhost:8080.

  6. El componente web Información de persona se muestra en la página web.

El código

AEM A continuación se muestra un resumen de cómo se crea el componente web, cómo se conecta a las consultas sin encabezado para recuperar contenido mediante consultas persistentes de GraphQL y cómo se presentan esos datos. El código completo se encuentra en GitHub.

Etiqueta de HTML de componente web

Se agrega un componente web reutilizable (también conocido como elemento personalizado) <person-info> a la página del HTML ../src/assets/aem-headless.html. Admite los atributos host y query-param-value para controlar el comportamiento del componente. El valor del atributo host invalida el valor aemHost del objeto aemHeadlessService en person.js, y query-param-value se usa para seleccionar a la persona que se va a procesar.

    <person-info
        host="https://publish-p123-e456.adobeaemcloud.com"
        query-param-value="John Doe">
    </person-info>

Implementación de componentes web

person.js define la funcionalidad del componente web y a continuación se muestran los aspectos destacados de la misma.

Implementación del elemento PersonInfo

El objeto de clase del elemento personalizado <person-info> define la funcionalidad mediante los métodos de ciclo de vida connectedCallback(), adjuntando una raíz central, recuperando la consulta persistente de GraphQL y la manipulación DOM para crear la estructura DOM central interna del elemento personalizado.

// Create a Class for our Custom Element (person-info)
class PersonInfo extends HTMLElement {

    constructor() {
        ...
        // Create a shadow root
        const shadowRoot = this.attachShadow({ mode: "open" });
        ...
    }

    ...

    // lifecycle callback :: When custom element is appended to document
    connectedCallback() {
        ...
        // Fetch GraphQL persisted query
        this.fetchPersonByNamePersistedQuery(headlessAPIURL, queryParamValue).then(
            ({ data, err }) => {
                if (err) {
                    console.log("Error while fetching data");
                } else if (data?.personList?.items.length === 1) {
                    // DOM manipulation
                    this.renderPersonInfoViaTemplate(data.personList.items[0], host);
                } else {
                    console.log(`Cannot find person with name: ${queryParamValue}`);
                }
            }
        );
    }

    ...

    //Fetch API makes HTTP GET to AEM GraphQL persisted query
    async fetchPersonByNamePersistedQuery(headlessAPIURL, queryParamValue) {
        ...
        const response = await fetch(
            `${headlessAPIURL}/${aemHeadlessService.persistedQueryName}${encodedParam}`,
            fetchOptions
        );
        ...
    }

    // DOM manipulation to create the custom element's internal shadow DOM structure
    renderPersonInfoViaTemplate(person, host){
        ...
        const personTemplateElement = document.getElementById('person-template');
        const templateContent = personTemplateElement.content;
        const personImgElement = templateContent.querySelector('.person_image');
        personImgElement.setAttribute('src',
            host + (person.profilePicture._dynamicUrl || person.profilePicture._path));
        personImgElement.setAttribute('alt', person.fullName);
        ...
        this.shadowRoot.appendChild(templateContent.cloneNode(true));
    }
}

Registrar el elemento <person-info>

    // Define the person-info element
    customElements.define("person-info", PersonInfo);

Uso compartido de recursos de origen cruzado (CORS)

AEM AEM AEM Este componente web se basa en una configuración CORS basada en la que se ejecuta en el entorno de destino de la y supone que la página host se ejecuta en http://localhost:8080 en modo de desarrollo y a continuación se muestra una configuración OSGi de CORS de ejemplo para el servicio de autor de la local.

AEM Revise configuraciones de implementación para obtener el servicio correspondiente de la aplicación de.

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4