Control del ciclo de vida nativo angular
Ejecuta la inicialización en AfterViewInit, gestiona la limpieza en OnDestroy y evita fugas de memoria en las transiciones de ruta.
Esta guía se centra en decisiones reales de implementación: gestión del ciclo de vida, detección de cambios, diseño de almacenamiento y arquitectura de publicación. Puedes lanzar más rápido con plugins preconstruidos manteniendo un control al nivel de Angular sobre seguridad, rendimiento y SEO.
Ejecuta la inicialización en AfterViewInit, gestiona la limpieza en OnDestroy y evita fugas de memoria en las transiciones de ruta.
Persiste la salida JSON y renderizada por separado para que los equipos puedan volver a editar páginas manteniendo un formato de publicación estable.
Empieza con plugins listos para producción para bloques, controles de estilo, almacenamiento y exportaciones en lugar de crear funciones de editor desde cero.
Genera URLs rastreables con metadatos y esquema, manteniendo la experiencia de edición completamente visual para usuarios no desarrolladores.
Empieza con una integración mínima, luego añade APIs y barreras de seguridad una vez que el ciclo de vida del editor sea estable.
npm install grapesjsEncapsula GrapesJS en un servicio inyectable para gestionar el ciclo de vida y exponer la instancia del editor en toda tu aplicación:
// grapesjs.service.ts
import { Injectable, ElementRef, NgZone } from '@angular/core';
import grapesjs from 'grapesjs';
import type { Editor } from 'grapesjs';
@Injectable({ providedIn: 'root' })
export class GrapesJSService {
private editor: Editor | null = null;
constructor(private zone: NgZone) {}
init(container: ElementRef): Editor {
this.editor = grapesjs.init({
container: container.nativeElement,
fromElement: false,
height: '100vh',
storageManager: false,
});
this.editor.on('component:selected', () => {
this.zone.run(() => {
// Keep Angular state updates reactive when GrapesJS triggers events.
});
});
return this.editor;
}
destroy(): void {
this.editor?.destroy();
this.editor = null;
}
}Inyecta el servicio, adjunta la referencia del contenedor y gestiona el ciclo de vida del editor mediante ganchos Angular:
// editor.component.ts
import { AfterViewInit, Component, ElementRef, OnDestroy, ViewChild } from '@angular/core';
import { GrapesJSService } from './grapesjs.service';
@Component({
selector: 'app-editor',
template: '<div #editorContainer style="height:100vh"></div>',
})
export class EditorComponent implements AfterViewInit, OnDestroy {
@ViewChild('editorContainer') container!: ElementRef;
constructor(private gjsService: GrapesJSService) {}
ngAfterViewInit(): void { this.gjsService.init(this.container); }
ngOnDestroy(): void { this.gjsService.destroy(); }
}Conjuntos de bloques de héroes, precios, características y testimonios para la creación de páginas de marketing.
Sincroniza los datos del proyecto del editor con tu backend de Angular usando endpoints estructurados.
Extiende los controles de estilo con preajustes de espaciado y tokens de diseño responsivos.
Exporta paquetes portátiles de HTML y CSS con instantáneas de versión para revertir.
Añade GrapesJS a tu app de Angular e inicializa solo en el navegador después de que exista el contenedor del editor.
Crea un GrapesJSService que exponga los métodos de init y destrucción para que los componentes permanezcan delgados y testables.
Guarda el JSON del proyecto para la edición y HTML/CSS para la entrega, luego conecta las subidas seguras de los assets.
La lista blanca permitía bloques, escalas tipográficas y tokens de espaciado para evitar páginas inconsistentes.
Envía páginas a través de tu pila Angular con metadatos, análisis y versiones seguras para rollback.
GrapesJS lanza eventos fuera de la zona de Angular. Envuelva las llamadas al evento del editor dentro de NgZone.run(() => { ... }) para activar correctamente la detección de cambios Angular.
GrapesJS requiere el DOM del navegador. Al usar Angular Universal (SSR), protege la inicialización de tu GrapesJS con isPlatformBrowser(platformId) para evitar errores en el servidor.
Utiliza ngAfterViewInit en lugar de ngOnInit al acceder al contenedor ViewChild. ngOnInit se ejecuta antes de que la vista esté completamente renderizada, por lo que la referencia del contenedor quedará indefinida.
Utiliza plugins y patrones de implementación listos para producción para lanzar más rápido y con menos errores de arquitectura.
Explora plugins compatibles con Angular