Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Angular 4模块中加载库?_Javascript_Angular_Shared Libraries_Lazy Loading - Fatal编程技术网

Javascript 如何在Angular 4模块中加载库?

Javascript 如何在Angular 4模块中加载库?,javascript,angular,shared-libraries,lazy-loading,Javascript,Angular,Shared Libraries,Lazy Loading,我有一个包含多个模块的应用程序。 其中一个模块是可视化pdf。我使用的是非常贪婪的pdf.js,而vendor.js也因此变得很大 有没有办法在懒洋洋加载pdf模块的同时懒洋洋地加载库 我注意到了这个答案,但感觉不太对。 我不是想懒洋洋地加载一个模块,而是一个外部库。如果你想懒洋洋地加载外部库,比如jquery,jspdf,你可以创建一些服务,比如: 延迟加载library.service.ts import { Injectable, Inject } from '@angular/core

我有一个包含多个模块的应用程序。
其中一个模块是可视化pdf。我使用的是非常贪婪的pdf.js,而vendor.js也因此变得很大

有没有办法在懒洋洋加载pdf模块的同时懒洋洋地加载库

我注意到了这个答案,但感觉不太对。


我不是想懒洋洋地加载一个模块,而是一个外部库。

如果你想懒洋洋地加载外部库,比如
jquery
jspdf
,你可以创建一些服务,比如:

延迟加载library.service.ts

import { Injectable, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { ReplaySubject } from 'rxjs/ReplaySubject';

import { DOCUMENT } from '@angular/platform-browser';

@Injectable()
export class LazyLoadingLibraryService {
  private loadedLibraries: { [url: string]: ReplaySubject<any> } = {};

  constructor(@Inject(DOCUMENT) private readonly document: any) { }

  public loadJs(url: string): Observable<any> {
    if (this.loadedLibraries[url]) {
      return this.loadedLibraries[url].asObservable();
    }

    this.loadedLibraries[url] = new ReplaySubject();

    const script = this.document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    script.onload = () => {
      this.loadedLibraries[url].next('');
      this.loadedLibraries[url].complete();
    };

    this.document.body.appendChild(script);
    return this.loadedLibraries[url].asObservable();
  }
}
export class AppComponent {
  constructor(private service: LazyLoadingLibraryService) {}

  loadJQuery() {
    this.service.loadJs('https://code.jquery.com/jquery-3.2.1.min.js').subscribe(() => {
        console.log(`jQuery version ${jQuery.fn.jquery} has been loaded`);
    });
  }

  loadJsPdf() {
     this.service.loadJs('https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js').subscribe(() => {
      console.log(`JsPdf library has been loaded`);
    });
  }

如果您正在寻找延迟加载角度模块,那么以下问题可能会对您有所帮助:


如果您想延迟加载外部库,例如
jquery
jspdf
,您可以创建如下服务:

延迟加载library.service.ts

import { Injectable, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { ReplaySubject } from 'rxjs/ReplaySubject';

import { DOCUMENT } from '@angular/platform-browser';

@Injectable()
export class LazyLoadingLibraryService {
  private loadedLibraries: { [url: string]: ReplaySubject<any> } = {};

  constructor(@Inject(DOCUMENT) private readonly document: any) { }

  public loadJs(url: string): Observable<any> {
    if (this.loadedLibraries[url]) {
      return this.loadedLibraries[url].asObservable();
    }

    this.loadedLibraries[url] = new ReplaySubject();

    const script = this.document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    script.onload = () => {
      this.loadedLibraries[url].next('');
      this.loadedLibraries[url].complete();
    };

    this.document.body.appendChild(script);
    return this.loadedLibraries[url].asObservable();
  }
}
export class AppComponent {
  constructor(private service: LazyLoadingLibraryService) {}

  loadJQuery() {
    this.service.loadJs('https://code.jquery.com/jquery-3.2.1.min.js').subscribe(() => {
        console.log(`jQuery version ${jQuery.fn.jquery} has been loaded`);
    });
  }

  loadJsPdf() {
     this.service.loadJs('https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js').subscribe(() => {
      console.log(`JsPdf library has been loaded`);
    });
  }

如果您正在寻找延迟加载角度模块,那么以下问题可能会对您有所帮助:


    • 我希望您使用的是Angular CLI

    • 安装
      pdfjs dist
      软件包:

      npm安装pdfjs dist

    • 为其安装类型:

      npm安装@types/pdfjs dist——保存开发

    • 将以下导入语句添加到延迟加载的模块文件中:

      import'pdfjs dist'

    • 最后一步是在运行
      ngbuild
      时,将pdf.js源代码嵌入延迟加载包中

      您应该能够从代码中访问全局PDFJS变量


      希望这有帮助。

      我希望您正在使用Angular CLI

    • 安装
      pdfjs dist
      软件包:

      npm安装pdfjs dist

    • 为其安装类型:

      npm安装@types/pdfjs dist——保存开发

    • 将以下导入语句添加到延迟加载的模块文件中:

      import'pdfjs dist'

    • 最后一步是在运行
      ngbuild
      时,将pdf.js源代码嵌入延迟加载包中

      您应该能够从代码中访问全局PDFJS变量


      希望这能有所帮助。

      到目前为止,您尝试过什么吗?没有。我用谷歌搜索。我找到了一些答案。我应该描述他们吗?是的,否则这个问题会被否决…有很多信息…你能指出他们或重新措辞我的问题吗?因为我找不到和你一样多的答案。到目前为止你试过什么吗?没有。我用谷歌搜索。我找到了一些答案。我应该描述他们吗?是的,否则这个问题会被否决…有很多信息…你能指出他们或重新措辞我的问题吗?因为我找不到你所要求的那么多答案真是个好的解决方案伙计!很好的解决方案,伙计!你能提供一个例子或一个例子吗?你能提供一个例子或一个例子吗?