Diseñador de informes
Crea diseños visuales de informes y documentos que tu backend llene con datos en el momento de renderizado.
PageKit: el creador de sitios GrapesJS autoalojado, con el código fuente incluido. Obtener acceso anticipado
Crea un creador de páginas visual de arrastrar y soltar para Angular con bloques, componentes, plantillas, edición adaptada y tu propio flujo de trabajo de publicación.
26k+
GitHub estrellas
1.4M+
Descargas de npm por mes
100+
Plugins en GJS.Market
$0
Matrícula, siempre
Tres editores GrapesJS reales, cargados solo cuando los pides. Ninguna de estas demos es una aplicación Angular — y ese es precisamente el objetivo. GrapesJS se renderiza en un elemento contenedor que posee, así que la superficie de edición se ve y se comporta igual que el framework que aloja la página a su alrededor.
El editor de stock: lienzo, bloques, árbol de capas, gestor de estilos y conmutador de dispositivos. Esta es la base desde la que empiezas antes de añadir un solo bloque propio.
Carga un editor de terceros en directo desde grapesjs.com.
Crear un creador de páginas requiere mucho más que unos pocos componentes de Angular. Un editor visual listo para producción necesita todos estos antes de que alguien pueda enviar una página con él:
GrapesJS proporciona la base visual de edición para la mayor parte de esa lista, así que tu aplicación Angular puede gastar su presupuesto en tu producto y en tu lógica de negocio. Los dos últimos — donde se almacenan los proyectos y cómo se activan las páginas — siguen siendo tuyos, porque son las partes que tienen que encajar con tu infraestructura.
El núcleo GrapesJS es de código abierto bajo la licencia BSD-3-Clause, versión 0.23.6, sin ninguna tasa de licencia a escala.
Explora GrapesJSEl mismo motor, apuntando a seis productos diferentes. Lo que cambia entre ellos es tu modelo de contenido, tus bloques y tu objetivo de publicación — no el editor.
Deja que los equipos de contenido editen las páginas visualmente dentro de tu CMS en lugar de rellenar un formulario y esperar que el diseño sobreviva.
Editor CMS sin cabezaPonle al marketing un editor visual para las páginas de campaña para que una nueva landing page deje de ser un ticket de desarrollador.
Creador de páginas de aterrizajePermite que los usuarios ensamblen formularios personalizados a partir de tus propios componentes de campo, con reglas de validación que tu aplicación ya entiende.
Componentes de formularioCrea y gestiona plantillas de correo electrónico de forma visual, con las tablas de marcado que los clientes de correo siguen exigiendo.
Generador de plantillas de correo electrónicoCrea diseños visuales de informes y documentos que tu backend llene con datos en el momento de renderizado.
Dale a cada cliente su propio entorno de edición de marca que parezca parte de tu producto, no una herramienta añadida.
Creador de páginas de marca blancaEl editor es una ruta dentro de tu aplicación, no un sustituto para ella. Todo lo que está encima de la capa de edición se queda exactamente donde ya lo han puesto los equipos de Angular.
Todo lo que hace que tu producto sea tuyo, sin cambiar.
Una ruta cargada por pereza, un componente que posee el contenedor y un servicio que posee la instancia del editor.
El motor de edición visual, que se ejecuta dentro del contenedor que proporciona tu componente.
Donde realmente están presentes los datos del proyecto, las subidas y los resultados publicados.
Angular es el dueño de tu aplicación. GrapesJS alimenta la capa de edición visual.
Nada en la parte superior o inferior lo proporciona el editor. Ese límite es lo que mantiene la integración lo suficientemente superficial como para eliminarla después: el editor nunca se convierte en lo que se construye tu producto.
Lee la guía de integración de AngularOcho subsistemas que vienen con el motor. Cada uno es un API que configuras, no una caja negra que aceptas tal cual.
Los usuarios construyen páginas arrastrando componentes al lienzo, reordenándolos y anidándolos donde se lo permitan.
Define tipos de componentes reutilizables con su propio traits, reglas sobre qué se puede colocar en ellos y tu propio comportamiento.
Proporciona a los usuarios secciones y disposiciones predefinidas en una paleta en lugar de una lista de elementos HTML en bruto.
Permite a los usuarios personalizar la tipografía, el espacio, el color y la disposición mediante paneles de propiedad que elijas y limites.
Previsualiza y reestiliza una página por punto de interrupción, usando los anchos de dispositivo que definas en lugar de un conjunto fijo.
Gestiona imágenes y otros activos del proyecto a través de un gestor de activos que puedas señalar a tu propio almacenamiento.
Guarda las páginas terminadas como puntos de inicio reutilizables para que la siguiente página empiece en algún sitio que no esté vacía.
Saca HTML y CSS limpios del editor, o lee el proyecto JSON y renderízalo como prefiera tu aplicación.
Lo que deliberadamente no está en esta lista: alojamiento, un CMS, un modelo de permisos e infraestructura de publicación. Esos pertenecen a tu aplicación, y las secciones siguientes indican cómo se conectan.
Un creador genérico de páginas web rara vez es el producto que alguien quiere. Cada capa del editor puede ser reemplazada por algo que encaje con tu aplicación.
Cada capa reduce el editor a tu modelo de contenido. Para la última, los usuarios están componiendo tu producto — no una página web.
Registra tipos de componentes que reflejen tus propios objetos de dominio, expone solo el traits sobre el que tu backend puede actuar y ponlos en la paleta de bloques dentro de tus propias categorías. Los usuarios luego trabajan con una tabla de precios o una cuadrícula de producto que tu API ya entiende, en lugar de con un margrado arbitrario que tendrás que analizar después.
// Your content model, not a generic website element.
editor.Components.addType('pricing-table', {
isComponent: (el) => el.dataset?.gjsType === 'pricing-table',
model: {
defaults: {
tagName: 'section',
droppable: false,
traits: ['plan', 'currency', 'billingPeriod'],
},
},
});
editor.Blocks.add('pricing-table', {
label: 'Pricing',
category: 'Your design system',
content: { type: 'pricing-table' },
});Un tipo de componente y el bloque que lo inserta. Los nombres de rasgos se convierten en los campos que lee tu backend.
La diferencia entre un editor que la gente usa y uno que abandona suele ser lo que hay en la paleta el primer día.
Tus bloques
No hagas que los usuarios empiecen desde un lienzo en blanco.
Crea bloques y plantillas reutilizables que encajen con el sistema de diseño de tu aplicación, para que cada página que crea un usuario ya sea fiel a la marca y ya sea responsiva. GJS.Market incluye conjuntos de bloques y gestores de plantillas que puedes instalar en lugar de crear los primeros cincuenta desde cero.
Explorar bloques y plantillasGrapesJS serializa un proyecto a JSON y lo entrega a un adaptador de almacenamiento. Lo que haga ese adaptador es completamente tuyo.
El editor nunca se comunica con tu base de datos. Llama al adaptador que registraste, y el adaptador llama al API que ya tienes.
editor.Storage.add('angular-backend', {
async load() {
return firstValueFrom(this.http.get(`/api/pages/${this.pageId}`));
},
async store(data) {
return firstValueFrom(this.http.put(`/api/pages/${this.pageId}`, data));
},
});
grapesjs.init({
container,
storageManager: { type: 'angular-backend', autosave: true, stepsBeforeSave: 5 },
});Un adaptador de almacenamiento personalizado conectado por cable a tu API. Nada aquí es específico de GJS.Market — es el contrato de almacenamiento documentado del editor.
Los componentes, estilos, páginas y recursos se serializan en un documento JSON que puedes almacenar en cualquier columna o colección.
El gestor de almacenamiento puede guardar tras un número configurable de cambios en lugar de solo con una acción explícita.
Registra un adaptador personalizado y enruta la carga y almacena a través del Angular HttpClient, con tus propios interceptores y headers de autenticación.
Como cada guardado es un documento, guardar el historial es una decisión de backend — el editor no necesita saber que ocurrió.
Exporta el marcado renderizado junto con el proyecto JSON cuando tu ruta de entrega necesite una salida estática en lugar de un re-renderizado.
Una página publicada es un registro separado con su propio ciclo de vida. Manténlo apartado del borrador al que escribe el editor.
Tú controlas dónde se almacenan los datos del proyecto.
La autoría y la publicación son problemas diferentes con distintos modos de fallo. El editor resuelve el primero; el segundo permanece en tu infraestructura, donde ya están tus cachés, permisos y rollbacks.
A dónde puede ir la producción publicada
Escribe el resultado de nuevo en el sistema de contenidos que ya ejecuta tu organización.
Publica el proyecto o el marcado renderizado en un endpoint que posea la validación y los permisos.
Renderiza las páginas a archivos en el momento de publicación para que la página en vivo no tenga nada del tiempo de ejecución del editor.
Almacena, transforma y sirve la salida por el mismo camino que tu aplicación ya utiliza para servir sus páginas.
Empuja los activos publicados y el marcado al borde, con la invalidación de caché que controlas tú.
Activa tu pipeline de build o deploy existente desde la acción de publicación.
GrapesJS se encarga de la autoría. Tu infraestructura puede gestionar la publicación.
Un despliegue de tu aplicación Angular, un editor y un mundo separado de páginas para cada cliente en él.
Angular SaaS
Org A
Org B
Org C
Nada de esto es una función de GrapesJS. El editor no tiene concepto de inquilino: carga el proyecto que se le asigna y almacena el proyecto que se le devuelve. La tenencia es algo que tu aplicación Angular y tu backend implementan — por eso también puede coincidir con el modelo de aislamiento que ya tienes.
Explora el Creador de Páginas SaaSNada en el editor tiene que parecerse al editor. Cada superficie que un usuario toca es configurable, reemplazable o removible.
Convierte un editor visual en una parte nativa de tu producto Angular.
Explora el Constructor de Páginas de marca blancaLa versión corta, en cuatro pasos. La guía completa — detalles del ciclo de vida, envolventes, detección de cambios sin zona, preocupaciones de producción — está en su propia página y va mucho más allá.
Añade el editor a tu aplicación. Es un paquete npm sencillo sin un paso de compilación específico de Angular.
Mantén la instancia del editor en un servicio inyectable para que el componente se mantenga delgado y la instancia sea fácil de compartir, simular y desmontar.
El elemento contenedor debe estar en el DOM antes de crear el editor, porque GrapesJS lo mide inmediatamente.
Llama a destruir cuando la ruta quede libre. Sin ella, el editor mantiene sus oyentes DOM y la siguiente navegación filtra una instancia.
npm install grapesjsUna dependencia. No se requiere ningún envoltorio específico de Angular.
import { Injectable, NgZone, inject } from '@angular/core';
import grapesjs, { type Editor } from 'grapesjs';
@Injectable({ providedIn: 'root' })
export class PageBuilderService {
private readonly zone = inject(NgZone);
private editor?: Editor;
create(container: HTMLElement): Editor {
// GrapesJS binds its own DOM listeners to the canvas. Creating it outside
// Angular keeps every drag frame from scheduling change detection.
this.editor = this.zone.runOutsideAngular(() =>
grapesjs.init({
container,
height: '100%',
fromElement: false,
storageManager: false,
})
);
return this.editor;
}
destroy(): void {
this.editor?.destroy();
this.editor = undefined;
}
}El servicio posee la instancia y su vida útil; el componente posee únicamente el contenedor.
import {
AfterViewInit,
Component,
ElementRef,
OnDestroy,
inject,
viewChild,
} from '@angular/core';
import { PageBuilderService } from './page-builder.service';
@Component({
selector: 'app-page-builder',
standalone: true,
template: '<div #canvas class="builder"></div>',
styles: '.builder { height: 100vh; }',
})
export class PageBuilderComponent implements AfterViewInit, OnDestroy {
private readonly builder = inject(PageBuilderService);
private readonly canvas = viewChild.required<ElementRef<HTMLElement>>('canvas');
ngAfterViewInit(): void {
// The container has to be in the DOM first: GrapesJS measures it on init.
this.builder.create(this.canvas().nativeElement);
}
ngOnDestroy(): void {
// Without this the editor keeps its listeners after the route changes.
this.builder.destroy();
}
}Crea después de que exista la vista, destruye cuando desaparezca. Ese par es la mayor parte de la integración.
¿Necesitas la guía completa de integración de Angular?
Las opciones de envoltorio, la detección de cambios sin zona, las rutas de editor cargadas con pereza, el manejo de activos y la lista de verificación de producción se cubren de principio a fin.
Lee la Guía de Integración AngularGrapesJS emite sus propios eventos, y esos eventos no provienen de Angular. Coordinar ambos son unas pocas líneas, pero saltárselas produce los dos fallos que cada integración detecta primero.
editor.on('storage:end:store', () => {
// Editor events fire outside Angular because the editor was created there.
// Re-enter the zone before touching state the template renders.
this.zone.run(() => this.lastSavedAt.set(new Date()));
});Reentrando en la zona en el único manejador que actualiza el estado de renderizado.
Crea el editor dentro de runOutsideAngular para que la interacción con canvas no programe la detección de cambios en cada fotograma, y luego vuelve a entrar en la zona en el puñado de gestores de eventos que realmente actualizan el estado que renderiza tu plantilla. En una aplicación sin zona, los mismos manejadores actualizan señales y el envoltorio exterior ya no es necesario.
Más sobre el ciclo de vida y las zonas de AngularGrapesJS necesita un navegador DOM. En Angular, SSR o Angular Universal, eso significa que el editor se crea solo en el navegador — la ruta alrededor de él sigue renderizándose en el servidor con normalidad.
Guarda la inicialización con isPlatformBrowser y regresa antes de tiempo en el servidor. El resto de la ruta permanece sin cambios: los guardianes, resolvers y el marcado circundante mantienen su comportamiento renderizado por el servidor, y solo el contenedor del editor llega vacío.
import { PLATFORM_ID, inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
export class PageBuilderComponent implements AfterViewInit {
private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
ngAfterViewInit(): void {
// There is no DOM on the server and GrapesJS needs one, so the editor is
// created in the browser only. The rest of the route still renders on the
// server as usual.
if (!this.isBrowser) return;
this.builder.create(this.canvas().nativeElement);
}
}Todo el ajuste de SSR: una sola comprobación de plataforma antes de crear el editor.
La integración es código Angular normal, que es lo principal que merece la pena mencionar al respecto.
El editor envía sus propias definiciones de tipos, por lo que la instancia, su configuración y sus eventos se escriben en el sitio de la llamada.
La creación y el desmontaje dependen de ngAfterViewInit y ngOnDestroy — no hay arranque manual fuera del árbol de componentes.
Nada en la integración depende de la compilación de plantillas en tiempo de ejecución, así que la ruta del editor se construye como cualquier otra ruta cargada por pereza.
Cuando SSR está en juego, solo la creación del editor está protegida por el navegador; el resto del componente compila y renderiza normalmente.
Todas las capacidades que aparecen a continuación deben existir antes de que un editor visual sea utilizable. La única pregunta es cuál de ellas escribes tú mismo.
| Capacidad | Desde cero | GrapesJS |
|---|---|---|
| Lienzo visual | Construir | Incluido |
| Arrastrar y soltar | Construir | Incluido |
| Componentes | Construir | Incluido |
| Bloques | Construir | Extensible |
| Estilo | Construir | Incluido |
| Edición responsiva | Construir | Incluido |
| Activos | Construir | Extensible |
| Plantillas | Construir | Extensible |
| Almacenamiento | Construir | Extensible |
| Exportación | Construir | Extensible |
| Integración de Angular | Construir | Integrar |
"Extensible" significa que el subsistema existe y tiene un API documentado que apuntas a tu propia implementación — no es que llegue precableado a tu backend. Verificado contra GrapesJS 0.23.6 en 2026-09-03.
Construye tu producto Angular. No reconstruyas el motor de edición visual.
La pila que acaba teniendo un constructor que funciona. GrapesJS cubre la primera capa; el resto es tuyo para montar, instalar o comprar.
El motor te da la superficie de edición. Todo lo que un producto específico necesita encima — la paleta de bloques, el sistema de plantillas, el texto enriquecido, la persistencia, la salida hacia la producción — es donde entran en juego los plugins GJS.Market. Cada anuncio a continuación es un producto real, con el precio mostrado.
Problema: un editor nuevo tiene una paleta vacía y nadie construye una página con un <div> sin usar.
Explora esta categoríaLa paleta inicial: columnas, texto, imágenes, enlaces y vídeo, para que el lienzo sea utilizable desde el primer día.
Bloques basados en Tailwind, para que las páginas que los usuarios creen salgan igualando un sistema de diseño de utilidad que ya usas.
Bloques de cuadrícula y componentes Bootstrap 5 para equipos cuyo sistema de diseño ya es Bootstrap.
Un encabezado editado una vez y reutilizado en cada página, en lugar de que las copias se separaran.
Problema: los usuarios necesitan un punto de partida, y los proyectos de varias páginas necesitan un gestor que el editor no incluye.
Explora esta categoríaUna biblioteca de plantillas dentro del editor, para que una nueva página empiece desde un diseño terminado.
Proyectos de varias páginas con una lista de páginas, así que un constructor gestiona un sitio en lugar de un solo documento.
Permite a los usuarios guardar sus propias secciones como bloques reutilizables: tu paleta crece sin que hayas enviado nada.
Navegación y gestión de proyectos alrededor del editor, para equipos que trabajan en más de una cosa a la vez.
Problema: todo el mundo asume que el texto enriquecido y los formularios de trabajo están integrados. Ninguno lo está, más allá de lo básico.
Explora esta categoríaComponentes de formulario con entradas, selecciones y validación traits, listos para enviar a tus endpoints.
Sustituye el editor de texto enriquecido integrado por CKEditor 5 para equipos que necesitan una edición de texto seria.
Lo mismo con TinyMCE 6 — familiar para cualquiera que venga de un CMS tradicional.
Controles de formato adicionales en el editor de texto enriquecido por defecto sin añadir dependencia de terceros.
Problema: el prototipo que nunca persistió en nada es el que nunca se lanzó.
Explora esta categoríaPersistencia local en el navegador: útil para borradores, edición offline y entornos de previsualización.
Almacena proyectos en Directus, si un backend headless ya forma parte de tu stack.
Descarga una página como ZIP de HTML, CSS y assets — la ruta de exportación más sencilla posible.
Publica directamente en Netlify, para productos cuya salida es un sitio estático alojado.
O empezar desde una categoría
Ambas columnas terminan con un constructor en funcionamiento. Difieren en cuánto de él sigues manteniendo en dos años.
GrapesJS proporciona la base de edición visual. Los plugins de GJS.Market te permiten ampliar tu constructor con capacidades adicionales en lugar de construir todas las funciones internamente.
Cinco formas recurrentes, y lo que cada una de ellas realmente compra con un editor visual.
Añadir edición visual a un producto cuyos clientes actualmente piden al soporte que cambie una página por ellos.
Crea un entorno de edición personalizado por cliente en vez de entregar un CMS que nadie quería.
Añadir edición visual sin pasar un año escribiendo un motor de edición desde cero.
Deja que los profesionales del marketing creen y cambien páginas sin que un desarrollador esté al tanto de cada titular.
Crea flujos de trabajo internos controlados de edición, donde lo que se puede editar es tan importante como lo que se puede construir.
Cuatro formas de lanzar un editor visual. Se solapan, pero parten de diferentes limitaciones — y elegir el incorrecto aparece tarde.
Construye un editor visual dentro de tu propia aplicación Angular, propiedad de tu equipo y moldeada por tu modelo de contenido. Esa es esta página.
Incrusta el editor en una aplicación que ya existe, con una superficie mínima entre ambas.
Creador de páginas embebibleCrea un producto de edición visual orientado al cliente, con arrendamiento, planes y publicación por cliente.
Creador de páginas SaaSHaz que el editor parezca y se comporte como tu propio producto, hasta en el vocabulario de sus viñetas.
Creador de páginas de marca blanca¿Construir lo mismo en otro framework? El argumento es idéntico para React, Next.js y Vue: solo cambia el código del ciclo de vida. Creador de páginas React, Creador de páginas Next.js, Creador de páginas Vue.
Un editor es una aplicación pesada y una página publicada no. Tratarlos como un solo paquete es el error que vale la pena evitar al principio.
Los usuarios que nunca abren el constructor nunca deberían descargarlo. Una ruta perezosa mantiene el editor fuera de tu paquete principal.
Crea el editor fuera de la zona de Angular y vuelve a introducirlo solo en los manejadores que actualizan el estado renderizado.
Paginada el gestor de activos con tu API en vez de entregarle varios miles de imágenes a la vez.
Crea la instancia cuando el editor realmente se muestra, no cuando el componente que lo rodea se monta.
La salida publicada es HTML y CSS. Nada en el editor necesita venir con ella.
El tiempo de ejecución del editor y la página publicada no necesitan tener los mismos requisitos de rendimiento.
Un editor visual acepta contenido creado por los usuarios y lo escribe de nuevo en tu sistema. Cada uno de estos pertenece al lado del servidor de ese exchange.
Comprueba en cada carga, almacenamiento y publicación si este usuario puede actuar en este proyecto.
Resuelve el tenant desde la sesión, nunca desde un parámetro que el cliente pueda cambiar.
Validar el tipo y tamaño del lado del servidor, y servir las subidas desde un origen que no pueda ejecutarlas.
El adaptador de almacenamiento se ejecuta en el navegador. Sus endpoints necesitan la misma autenticación que el resto de tu API.
Cuando los editores pueden incrustar código personalizado, limpia el servidor antes de que ese marcado se sirva a nadie más.
La publicación cambia lo que ve el público. Limita la tarifa, regístrala y ponla bajo su propio permiso.
Ocultar un botón cambia el UI, no el API. Cada regla que implica el UI también debe existir detrás de él.
Nunca confíes solo en permisos del lado del cliente.
¿Necesitas ayuda para integrar, extender o personalizar GrapesJS dentro de tu aplicación Angular? Nuestro equipo puede ayudarte con la integración, plugins personalizados, personalización de UI e implementación en producción.
Un editor visual dentro de una aplicación Angular que permite a los usuarios ensamblar páginas arrastrando componentes a un lienzo en lugar de escribir marcado. La app Angular se encarga del enrutamiento, la autenticación y los datos; el editor es el responsable de la superficie de edición.
Sí. GrapesJS es independiente del framework: se renderiza en un elemento contenedor que le asignas, así que funciona dentro de un componente Angular como cualquier otra biblioteca basada en DOM.
No — es el motor de edición visual sobre el que se basa un creador de páginas Angular. No hay un envoltorio oficial de Angular; integras directamente la biblioteca central, que es un componente y un servicio.
Instala el paquete, mantén la instancia en un servicio inyectable, créala en ngAfterViewInit una vez que el contenedor esté en DOM y destrúyela en ngOnDestroy. La guía completa cubre los envoltorios, zonas y preocupaciones de producción.
Sí. Los bloques se registran a través del gestor de bloques con tu propia etiqueta, categoría y contenido, por lo que la paleta solo puede contener secciones que soporte tu producto.
Sí. Los tipos de componentes se registran con su propio traits, reglas de drop y comportamiento, que es como el editor se reduce desde el HTML genérico hasta tu modelo de contenido.
Sí. Un proyecto guardado puede recargarse como punto de partida para una nueva página. Las librerías y gestores de plantillas también están disponibles como plugins si prefieres no construir el UI.
Sí. Registra un adaptador de almacenamiento personalizado cuyos métodos de carga y almacenamiento llamen a tu API a HttpClient, para que tus interceptores, cabeceras de autenticación y gestión de errores se apliquen como siempre.
Sí. El editor produce un documento JSON y nunca se comunica con una base de datos en sí, así que dónde se almacena ese documento es totalmente una decisión de backend.
Sí, y es uno de los usos más comunes: una paleta de bloques restringida, plantillas fieles a la marca y una acción de publicación que escribe en el lugar desde donde se sirven tus páginas de marketing.
Sí. El editor sustituye la pantalla de edición basada en formularios; tu CMS mantiene la propiedad de los tipos de contenido, el flujo de trabajo y los permisos.
Sí. Registra tus propios componentes de campo como tipos de componentes con traits para validación y nombre, así lo que los usuarios ensamblan se corresponde a un esquema que tu backend entienda.
Sí, pero la tenencia es el trabajo de tu aplicación. El editor no tiene concepto de inquilino: tu backend resuelve qué proyectos, recursos y plantillas puede ver el usuario actual.
Sí. Los paneles, iconos, colores, categorías de bloques y terminología son configurables, y puedes controlar el editor desde tu propio Angular UI mediante su comando API.
La ruta circundante se renderiza en el servidor con normalidad; el editor en sí se crea solo en el navegador. Inicializa con isPlatformBrowser y regresa antes en el servidor.
Crea el editor dentro de runOutsideAngular para que la interacción con canvas no active la detección de cambios constantemente, y luego usa NgZone.run dentro de los pocos gestores de eventos que actualizan el estado que renderiza tu plantilla.
Sí. GrapesJS incluye sus propias definiciones de tipos, así que la instancia del editor, su objeto de configuración y sus eventos se escriben en una base de código Angular TypeScript ordinaria.
Sí. Los plugins son funciones que reciben el editor y registran componentes, bloques, comandos o paneles. GJS.Market lista plugins gratuitos y comerciales para bloques, texto enriquecido, almacenamiento, recursos y exportación.
Usa Angular para tu aplicación y GrapesJS para la experiencia de edición visual. Añade tus propios componentes, bloques, plantillas, flujo de trabajo de almacenamiento y publicación — y luego amplía el generador con plugins GJS.Market cuando necesites más.
Instala el editor, móntalo en un contenedor dentro de un componente Angular y esta tarde ten algo en pantalla.
EmpiezaBloques, plantillas, texto enriquecido, almacenamiento y exportación — instala las capacidades que tu producto necesita en lugar de escribirlas.
Explorar pluginsCiclo de vida, zonas, SSR, envoltorios y la lista de verificación de producción, cubiertos de principio a fin en la página de integración.
Ver Guía AngularTu app Angular. Tu editor. Tu producto.