"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo cargar secuencias de comandos dinámicamente en Angular usando un servicio?

¿Cómo puedo cargar secuencias de comandos dinámicamente en Angular usando un servicio?

Publicado el 2024-11-25
Navegar:472

How Can I Dynamically Load Scripts in Angular Using a Service?

Carga dinámica de scripts en Angular: una solución

Introducción:

En aplicaciones Angular, es necesario incluir scripts externos puede surgir. Sin embargo, agregar etiquetas

Carga dinámica de secuencias de comandos:

Para cargar dinámicamente scripts, podemos emplear los siguientes pasos:

  1. Crear un almacén de scripts: Establecer una matriz de objetos llamada ScriptStore, que contiene rutas de script y nombres únicos para la carga dinámica.
  2. Inyectar el servicio de script: Implemente ScriptService como un servicio Angular inyectable que gestiona la carga de scripts.
  3. Cargar Método de scripts: Defina un método de carga en ScriptService para cargar scripts dinámicamente. Este método toma los nombres de los scripts como parámetros y devuelve una promesa.
  4. Cargar implementación del script: Dentro del método de carga, verifique si el script ya está cargado. De lo contrario, cree un elemento
  5. Inyectar e invocar el servicio: Inyectar ScriptService en el componente o servicio donde necesita cargar scripts. Llame al método de carga para cargar los scripts deseados.

Código de ejemplo:

A continuación se muestra una implementación de muestra del almacén y servicio de scripts:

interface Scripts {
  name: string;
  src: string;
}

// Script store with sample script definitions
export const ScriptStore: Scripts[] = [
  { name: 'filepicker', src: 'https://api.filestackapi.com/filestack.js' },
  { name: 'rangeSlider', src: '../../../assets/js/ion.rangeSlider.min.js' }
];

@Injectable()
export class ScriptService {
  private scripts: any = {};

  constructor() {
    ScriptStore.forEach((script: any) => {
      this.scripts[script.name] = {
        loaded: false,
        src: script.src
      };
    });
  }

  load(...scripts: string[]) {
    var promises: any[] = [];
    scripts.forEach((script) => promises.push(this.loadScript(script)));
    return Promise.all(promises);
  }

  loadScript(name: string) {
    return new Promise((resolve, reject) => {
      // Check if script is already loaded
      if (this.scripts[name].loaded) {
        resolve({ script: name, loaded: true, status: 'Already Loaded' });
      } else {
        let script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = this.scripts[name].src;
        script.onload = () => {
          this.scripts[name].loaded = true;
          resolve({ script: name, loaded: true, status: 'Loaded' });
        };
        script.onerror = (error: any) => resolve({ script: name, loaded: false, status: 'Loaded' });
        document.getElementsByTagName('head')[0].appendChild(script);
      }
    });
  }
}

Uso:

En el componente o servicio donde desea cargar scripts dinámicamente, inyecte ScriptService. Luego, dentro de un método, invoca el método de carga de esta manera:

this.script.load('filepicker', 'rangeSlider').then(data => {
  console.log('script loaded ', data);
}).catch(error => console.log(error));

En este ejemplo, los scripts del selector de archivos y del rangeSlider se cargarán dinámicamente. Ahora puede configurar ScriptStore para cargar scripts desde una CDN o una carpeta local según sea necesario.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3