Issue #2491💬 RespondidoAbierto el 6 de enero de 2020por sukheja-varunReacciones 1

Problema al adjuntar el evento a un nuevo plugin en Anglar

Respuesta rápidapor pouyamiralayi1

@sukheja-varun añadir cualquier evento al nuevo plugin Dentro de tu plugin, primero debes definir un componente de tipo personalizado: Luego define un nuevo bloque que utilice nuestro tipo de componente personalizado previamente definido: Para el modal, definimos las siguientes funciones: el ''createContent'' generará...

Lee la respuesta completa abajo ↓

Pregunta

Hola a todos, Estaba intentando añadir un nuevo plugin a grapejs dentro de mi proyecto Angular. Requisito: Nuevo plugin con nombre como Producto. Cuando el usuario suelta el Product Plugin en HTML, debería abrirse un modal donde el usuario pueda escribir algunos atributos y una búsqueda de autocompletado donde el usuario pueda buscar varios productos y enviar modales. Tengo que inyectar esos productos en HTML.

Consulté la documentación y encontré el siguiente ejemplo

  function myPlugin(editor){
      editor. BlockManager.add('my-first-block', {
        etiqueta: 'Bloque simple',
        contenido: '<div class="my-block">Este es un bloque simple</div>',
      });
  }

Pero cuando intenté trabajar en esto no pude:

  • adjuntar cualquier evento al nuevo plugin
  • API de llamadas
  • inyectar HTML personalizado

Respuestas (1)

pouyamiralayi7 de enero de 2020

@sukheja-varun

añadir cualquier evento al nuevo plugin

Dentro de tu plugin, primero debes definir un componente de tipo personalizado:

   editor. DomComponents.addType('my-first-type', {
            modelo: {
                Predeterminados: {
                    components: '<div class="my-block">Este es un bloque simple</div>',
                }
            }
    })

Luego define un nuevo bloque que utilice nuestro tipo de componente personalizado previamente definido:

    editor. BlockManager.add('my-first-block', {
            etiqueta: 'Bloque simple',
            Contenido: {
                Tipo: 'Mi-Primero-Tipo'
            }
    });

Para el modal, definimos las siguientes funciones:

    const createContent = () => {
            const content = document.createElement('div');
            content.style = 'posición: relativa';
            content.innerHTML =
                `
                    <form onsubmit="">
                        < >
                           <tipo de entrada="texto" id="consulta" marcador de posición="búsqueda..." nombre="consulta" estilo=" margen-inferior:10px; tamaño-fuente: 1rem; relleno: 10px 20px; borde-radio: 3px; borde: ninguno; ">
                        </div>
                    </form>
                    <estilo del botón=" color de fondo: azul; color: blanco; tamaño-fuente: 1rem; radio de borde: 5px; borde: ninguno; relleno: 10px 20px; cursor: puntero ">
                        Enviar
                    </botton>
                    `
            devolver contenido
    }

el ''createContent'' generará el HTML interno para tu modal.

        const applyChanges = () => {
            axios.post("http://example.com", {
                /*post cuerpo*/
            })
        }

el ''applyChanges'' es el manejador de clics para el botón de enviar dentro del modal. Y finalmente:

        const showModal = () => {
            const modal = editor. Modal
            const content = createContent()
            const BTN = content.children.length === 2 & content.children[1];
            btn.addEventListener('click', applyChanges)
            modal.open({
                título: "¡Mi diálogo!",
                Contenido: Contenido
            })
        }

Ahora que tenemos nuestro componente disponible como bloque y una forma de mostrar nuestro modal, necesitamos definir un oyente para el evento drop dentro de nuestro plugin:

    editor.on("canvas:drop", (dt, m) => {
            si (m & & m.atributos && m.atributos.tipo == 'mi-primero-tipo') {
                /*nuestro componente ha sido eliminado, muestra el modal:*/
                showModal()
            }
    })

API de llamadas

Como puedes ver en ''applyChanges'' puedes usar la librería de red que quieras, pero no hay ninguna biblioteca de red integrada disponible en grapesjs.

inyectar HTML personalizado

Para inyectar contenido dentro de tu componente, puedes usar tanto append como components. ¡Salud!

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 →

Explorar categorías de plugins

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