Issue #2417💬 RespondidoAbierto el 16 de noviembre de 2019por Lakshit-SinghalReacciones 0

API en el componente que no funciona tras el despliegue

Respuesta rápidapor artf

Solo funciona cuando lo suelto en el editor y no cuando carga como una URL desplegada Si cargas cosas desde algún tipo de almacenamiento (por ejemplo, DB) en tu "URL desplegada", asegúrate de tener una configuración remota correcta

Lee la respuesta completa abajo ↓

Pregunta

Block.js =>

const bm = editor. Jefe de bloque;
  const canvas = editor. Lienzo
  bm.add('comp-block', {
      etiqueta: 'Componente',
      categoría: 'Extra',
      Contenido: {
        Tipo: 'Prueba de componentes'
      },
      atributos: {
          Clase: 'FA Fa-Bars'
      },

});

Component.js =>

editor. DomComponents.addType('component-test', {
      modelo: {
        Predeterminados: {
          endpoint: ' // API URL // ', 
          Rasgos: [
            {
              tipo: 'select',
              Nombre: 'Endpoint',
              cambioProp: 1,
              Opciones: ['Punto final'],
            }
          ]
        },
        init() {
          this.listenTo(this, 'change:endpoint', this.refreshContent);
          this.refreshContent();
        },
         refreshContent() {
          const { endpoint } = this.attributes;
          const response = axios.get(endpoint,
          {
          cabeceras: {
            'Aceptar': 'solicitud/json',
            'Tipo de contenido': 'aplicación/json',
            }
          })
           var result= // API Response //
              this.components(resultado);
        } 
      }
    });

Podemos llamar a la API y funciona en Deployment cuando estamos pasando todo el html con script, cuerpo, estilo en Atributo de contenido del Administrador de bloques

Contenido:
 <script>
    var request = new XMLHttpRequest()
          request.open('GET',' // URL DE LA API // ', verdadero)
          request.setRequestHeader("Content-type", "application/json; charset=UTF-8");
          request.setRequestHeader("Aceptar", "application/json, text/plain, */*");
           request.onload = function(){
          var jsonData = JSON.parse(this.response)
        
request.send()
</script>

Pero cuando la API se llama a través del Component, no funciona cuando la página carga en el despliegue. Solo funciona cuando la suelto en el editor y no cuando carga como una URL desplegada.

Ejemplo:

modelo: {
		Predeterminados: {
			endpoint: ' API URL ', // algún prop para el rasgo
			Rasgos: [
				{
					tipo: 'select',
					Nombre: 'Endpoint',
					cambioProp: 1,
					Opciones: [ 'Endpoint' ],
				}
			]
		},
		init() {
			this.listenTo(this, 'change:endpoint', this.refreshContent);
			this.refreshContent();
		},
		async refreshContent() {
			const { endpoint } = this.attributes;
			const response = esperar a obtener(endpoint);
			...
			Sea resultado = '';
			// ...  Resultado HTML de la respuesta asíncrona
			...			
			this.components(resultado);
		}
	}

Respuestas (3)

artf17 de noviembre de 2019

Solo funciona cuando lo suelto en el editor y no cuando carga como una URL desplegada

Si cargas cosas desde algún tipo de almacenamiento (por ejemplo, DB) en tu "URL desplegada", asegúrate de tener una configuración remota correcta

Lakshit-Singhal18 de noviembre de 2019

@artf entiendo tu preocupación, pero en la versión desplegada las llamadas a la API dentro del contenido del blockmanager funcionan, solo que las API de componentes no se llaman. ¿Entonces es un problema de configuración remota o de otra cosa?

Por favor, ayúdame con el tema ... ¡Gracias de antemano!

artf19 de noviembre de 2019

¿Entonces es un problema de la configuración remota o de otra cosa?

Sí, como has descrito, puede que sea una configuración de almacenamiento incorrecta (comprueba también errores/advertencias en consola).

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.

Explora plugins gratuitos →
Opción premium

Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.

Explora plugins premium →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.