Plugin flash-prevention

Información general

El scully-plugin-flash-prevention es un postRenderer que te ayuda a ocultar los flashes que tu aplicación pueda estar experimentando una vez que agregas Scully a tu proyecto.

Después de añadir Scully, su aplicación aparecerá instantáneamente porque los pre-renderizados de HTML y CSS están disponibles de inmediato. Después de aparecer instantáneamente, los archivos JavaScript y CSS se descargarán y luego su aplicación Angular arrancará (init). Cuando arranca, la versión pre-renderizada puede desaparecer momentáneamente, y una vez la aplicación esté lista, la vista volverá a aparecer. Esta desaparición para luego volver a aparecer es muy normal para las aplicaciones que se renderizan previamente en un servidor. Este plugin sirve para evitarlo.

Este plugin muestra la copia pre-renderizada de tu aplicación hasta que esté completamente renderizada y el flash termine. Luego mostrará su aplicación y eliminará la copia.

Cómo funciona

Antes de este plugin, tu aplicación se pre-renderizaría y luego se guardaría en un archivo, como este:

<app-root _nghost-abc="" ng-version="9.0.1" class="my-class">
  // Aquí iría todo el contenido de su aplicación
</app-root>

Después de este plugin, verá lo siguiente en su plantilla pre-renderizada:

<app-root class="my-class"></app-root>
<app-root-scully _nghost-abc="" ng-version="9.0.1" class="my-class">
  // Aquí iría todo el contenido de tu aplicación
</app-root-scully>

Esta app-root-scully será la copia pre-renderizada de su aplicación. Antes de que su aplicación se renderice completamente, app-root se ocultará y se mostrará app-root-scully.

Una vez que su aplicación se haya iniciado por completo, app-root-scully es ocultará y 100ms más tarde se borrará del DOM. El mecanismo que muestra y oculta estos dos es CSS. Hay algo de CSS agregado durante la compilación de Scully similar a esto:

body:not(.loaded) app-root {
  display: none;
}
body.loaded app-root-scully {
  display: inherit;
}

Una vez que la aplicación se ha cargado totalmente, la clase loaded se agrega a la etiqueta <body>.

¡¡¡Y así funciona todo!!!

Empezando

Instalación

npm install -D @scullyio/scully-plugin-flash-prevention

Uso

Añada el postRenderer a tu scully.config:

// Añada esta línea a tus imports
import  { getFlashPreventionPlugin }  from '@scullyio/scully-plugin-flash-prevention';

// Añada lo siguiente a tu `scully.config.postRenderers`
exports.config = {
  ...
  postRenderers : [getFlashPreventionPlugin({appRootSelector: 'custom-app-root'})],
  ...
}

Solo necesitas pasar el {appRootSelector: 'custom-app-root'} si su aplicación tiene un selector distinto a app-root. Está predeterminado en app-root.

Actualice app.module para añadir alwaysMonitor en la llamada ScullyLibModule.forRoot.

ScullyLibModule.forRoot({
  useTransferState: true,
  alwaysMonitor: true,  <-- Añada esta línea a su `app.module.ts`
});

Aplique también cualquier estilo desde app-root a app-root-scully. Cualquier estilo que esté en su app.component.(css|scss|less) debe aplicarse a la copia que se hizo de su aplicación. Esto significa que posiblemente necesite mover cualquier estilo que se aplique a app-root específicamente, y colocarlo en una ubicación donde también pueda hacer que esos estilos se apliquen a app-root-scully. Observe el ejemplo:

// BEFORE
app-root {
  ... some styles;
}

// AFTER
app-root,
app-root-scully {
  ... some styles;
}