Komut dosyalarını dinamik olarak yüklemek için iyi bir yolum var! Şimdi projemde ng6, echarts4 (> 700Kb), ngx-echarts3 kullanıyorum. bunları ngx-echarts belgelerinde kullandığımda, yankıları angular.json'a içe aktarmam gerekiyor: "scripts": ["./ node_modules / echarts / dist / echarts.min.js"] dolayısıyla oturum açma modülünde, komut dosyalarını yüklerken sayfada .js, bu büyük bir dosya! Ben istemiyorum
Bu yüzden, her modülü bir dosya olarak açısal yüklediğini düşünüyorum, js'yi önceden yüklemek için bir yönlendirici çözümleyici ekleyip modül yüklemeye başlayabilirim!
// PreloadScriptResolver.service.js
@Injectable({
providedIn: 'root'
})
export class PreloadScriptResolver implements Resolve<IPreloadScriptResult[]> {
private scripts: any = {
echarts: { loaded: false, src: "assets/lib/echarts.min.js" }
};
constructor() { }
load(...scripts: string[]) {
const promises = scripts.map(script => this.loadScript(script));
return Promise.all(promises);
}
loadScript(name: string): Promise<IPreloadScriptResult> {
return new Promise((resolve, reject) => {
if (this.scripts[name].loaded) {
resolve({ script: name, loaded: true, status: 'Already Loaded' });
} else {
const 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) => reject({ script: name, loaded: false, status: 'Loaded Error:' + error.toString() });
document.head.appendChild(script);
}
});
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<IPreloadScriptResult[]> {
return this.load(...route.routeConfig.data.preloadScripts);
}
}
Sonra alt modül-yönlendirme.module.ts in içinde bu PreloadScriptResolver'ı içe aktarın:
const routes: Routes = [
{
path: "",
component: DashboardComponent,
canActivate: [AuthGuardService],
canActivateChild: [AuthGuardService],
resolve: {
preloadScripts: PreloadScriptResolver
},
data: {
preloadScripts: ["echarts"]
},
children: [.....]
}
Bu kod iyi çalışıyor ve şunları vaat ediyor: js dosyası yüklendikten sonra modül yüklenmeye başlar! bu Çözücü birçok yönlendiricide kullanabilir