Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Memuatkan Fail JavaScript Luaran Secara Dinamik dalam Sudut?

Bagaimana untuk Memuatkan Fail JavaScript Luaran Secara Dinamik dalam Sudut?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-21 00:28:16352semak imbas

How to Dynamically Load External JavaScript Files in Angular?

Cara Memuatkan Skrip Luaran secara Dinamik dalam Sudut

Seperti yang anda sedia maklum, ciri import ES6 yang digunakan dalam Sudut adalah statik dan diselesaikan semasa Penyusunan TypeScript. Untuk memuatkan skrip secara dinamik berdasarkan konfigurasi, anda boleh menggunakan teknik berikut.

Dalam script.store.ts, tentukan tatasusunan objek fail JavaScript yang mengandungi nama dan laluan skrip:

interface Scripts {
    name: string;
    src: string;
}  
export const ScriptStore: Scripts[] = [
    {name: 'filepicker', src: 'https://api.filestackapi.com/filestack.js'},
    {name: 'rangeSlider', src: '../../../assets/js/ion.rangeSlider.min.js'}
];

script.service.ts akan mengendalikan logik pemuatan skrip:

import {Injectable} from "@angular/core";
import {ScriptStore} from "./script.store";

declare var document: any;

@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) => {
        //resolve if already loaded
        if (this.scripts[name].loaded) {
            resolve({script: name, loaded: true, status: 'Already Loaded'});
        }
        else {
            //load script
            let script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = this.scripts[name].src;
            if (script.readyState) {  //IE
                script.onreadystatechange = () => {
                    if (script.readyState === "loaded" || script.readyState === "complete") {
                        script.onreadystatechange = null;
                        this.scripts[name].loaded = true;
                        resolve({script: name, loaded: true, status: 'Loaded'});
                    }
                };
            } else {  //Others
                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);
        }
    });
}

}

Suntikan ScriptService dan gunakannya untuk memuatkan skrip secara dinamik:

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

Teknik ini membolehkan anda memuatkan skrip secara dinamik berdasarkan konfigurasi anda, sama ada daripada CDN atau laluan fail setempat.

Atas ialah kandungan terperinci Bagaimana untuk Memuatkan Fail JavaScript Luaran Secara Dinamik dalam Sudut?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn