Issue #2690✓ ResueltoAbierto el 31 de marzo de 2020por adamwpeReacciones 12

Desaparecen componentes personalizados al guardar (Vue.js)

Respuesta rápidapor adamwpe8

@pouyamiralayi Gracias por eso, me ha orientado — es un ejemplo que me funciona para renderizar un componente Vue y se carga de nuevo en :), pero seguro que puede ser útil para otra persona: ¡Gracias a todos por la ayuda!

Lee la respuesta completa abajo ↓

Pregunta

Hola a todos,

Estoy intentando probar a añadir algunos componentes de Vue.js personalizados al gestor de bloques, y a primera vista, todo va bien: renderiza correctamente y los componentes de Vue responden.

Pero si guardo la plantilla, recargo mi página y pongo en el StorageManager 'gjs-style', 'gjs-components', 'gjs-html', 'gjs-css'.

El componente personalizado ya no se renderiza. Parece que el StorageManager elimina cualquier etiqueta de script???? Como si revisara mi solicitud REST GET, 'gjs-html' sí contiene la <script> etiqueta.

Antes de guardar:

! antes

Después de recargar la carga: ! después

Fragmento de códigoTEXT
No estoy muy seguro de que haya algún problema con mi componente:

`        
editor. BlockManager.add("vueApp", {
            etiqueta: "Vue App",
            categoría: 'Básico',
            id: "default-vue-app",
            Contenido: {
                script: function() {

const app1El = document.createElement("div");
                    app1El.id = 'app';

const app1Script = document.createElement("script");
                    app1Script.type = "texto/javascript";
                    app1Script.src = "http://[::1]/assets/vue/vueApp.js";

this.appendChild(app1El);
                    this.appendChild(app1Script);
                },
                Rasgos: [
                    {
                        Tipo: 'texto',
                        etiqueta: 'Nice',
                        Nombre: 'custom_att',
                        valor: 'Quién sabe',
                    }
                ]
            }
        });
`

¿Alguien ha probado a usar Vue.js componentes?

Respuestas (3)

👍 Muy útiladamwpe2 de abril de 2020

@pouyamiralayi

Gracias por eso, me ha orientado — es un ejemplo que me funciona para renderizar un componente Vue y se carga de nuevo en :), pero seguro que puede ser útil para otra persona:


editor. DomComponents.addType('vue_example', {
            modelo: {
                init() {

if (typeof this.getAttributes()['custom_att'] === "indefinido")
                        this.addAttributes({'custom_att': 'default'});

Onload, consigue los últimos enlaces
                    if (this.getTrait('custom_att') === indefinido)
                        this.getTrait('custom_att').set('default 'default');

this.getTrait('custom_att').set('default 'default');

this.listenTo(this, 'change:attributes', this.reRender);

},
                eliminado() {

},
                Predeterminados: {
                    removible: cierto,
                    Arrastrable: Cierto,
                    Droppable: Cierto,
                    Badgable: Cierto,
                    Estilizado: Cierto,
                    Resaltable: Cierto,
                    copiable: falso,
                    redimensionable: falso,
                    editable: false,
                    Hoverable: Cierto,
                    Rasgos: [
                        {
                            Tipo: 'texto',
                            etiqueta: 'Nice',
                            Nombre: 'custom_att'
                        }
                    ],
                    script: function(){

const app1El = document.createElement("div");
                        app1El.id = 'app';

const app1Script = document.createElement("script");
                        app1Script.type = "texto/javascript";
                        app1Script.src = "http://[::1]/assets/vue/vueApp.js";

this.appendChild(app1El);
                        this.appendChild(app1Script);

}
                },
                reRender() {
                    this.view.render();
                }
            },
            isComponent: function (el) {

if (el.tagName === 'vue_example')
                    return {type: 'vue_example'};
            }

});

editor. BlockManager.add('vue_example', {
            id: 'vue_example',
            etiqueta: 'Vue Test',
            categoría: 'Vue',
            Contenido: {
                etiquetaNombre: 'vue_test',
                tipo: 'vue_example',
                editable: false
            }
        });

¡Gracias a todos por la ayuda!

pouyamiralayi2 de abril de 2020

@adamwpe tuvimos algo así en el pasado, ¡disculpa por no haberlo llevado hasta el final! Haz esto:

editor. DomComponents.addType('your-type', {
    modelo:{
        isComponent: el => {},
        valores predeterminados:{
            script:function(){},
        },
    }
})

no es necesario extender desde dView y dModel en las versiones más recientes. Y para la integración de Vue JS, por favor, ten en cuenta que la estructura interna de tu componente Vue no sería detectada por Grapesjs porque no se genera ningún modelo para ello. Si tuviste alguna oportunidad de superar esta situación, ¡por favor háznoslo saber! ¡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.