「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > サービスを使用して Angular でスクリプトを動的にロードするにはどうすればよいですか?

サービスを使用して Angular でスクリプトを動的にロードするにはどうすればよいですか?

2024 年 11 月 25 日に公開
ブラウズ:719

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

Angular での動的スクリプトの読み込み: 解決策

はじめに:

Angular アプリケーションでは、外部スクリプトを含める必要があります生じる可能性があります。ただし、

動的スクリプトのロード:

動的にロードするにはスクリプトを作成するには、次の手順を実行します:

  1. スクリプト ストアの作成:動的読み込み用のスクリプト パスと一意の名前を保持する ScriptStore というオブジェクトの配列を確立します。
  2. スクリプト サービスの注入: スクリプトの読み込みを管理する注入可能な Angular サービスとして ScriptService を実装します。
  3. Load Scripts Method: ScriptService でスクリプトを動的にロードするロード メソッドを定義します。このメソッドはスクリプト名をパラメータとして受け取り、Promise を返します。
  4. ロード スクリプトの実装: ロード メソッド内で、スクリプトがすでにロードされているかどうかを確認します。そうでない場合は、
  5. サービスの挿入と呼び出し: ScriptService をスクリプトをロードする必要があるコンポーネントまたはサービス。必要なスクリプトをロードするには、load メソッドを呼び出します。

サンプル コード:

以下は、スクリプト ストアとサービスのサンプル実装です:

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

使用法:

スクリプトを動的にロードするコンポーネントまたはサービスに、ScriptService を挿入します。次に、メソッド内で次のようにロード メソッドを呼び出します。

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

この例では、ファイルピッカー スクリプトと rangeSlider スクリプトの両方が動的にロードされます。必要に応じて、CDN またはローカル フォルダーからスクリプトを読み込むように ScriptStore を構成できるようになりました。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3