Bagaimana untuk Memuatkan Fail JavaScript Luaran Secara Dinamik dalam Sudut?

Mary-Kate Olsen
Lepaskan: 2024-11-21 00:28:16
asal
300 orang telah melayarinya

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'}
];
Salin selepas log masuk

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);
        }
    });
}

}
Salin selepas log masuk

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));
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan