आप इस तकनीक का उपयोग कर अपने कोणीय 2/4 प्रोजेक्ट में मांग पर जेएस स्क्रिप्ट और पुस्तकालयों को गतिशील रूप से लोड कर सकते हैं।
script.store में ScriptStore
बनाएं।ts कि पथ स्क्रिप्ट के में शामिल होंगे तो स्थानीय या दूरस्थ सर्वर और एक नाम कि स्क्रिप्ट गतिशील लोड करने के लिए उपयोग किया जाएगा पर:
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 बनाएंScriptService
प्रदान करने के लिए एक इंजेक्शन योग्य सेवा के रूप में जो स्क्रिप्ट फ़ाइलों को लोड करने में संभाल लेंगे। इस कोड को शामिल करें:
import {Injectable} from "@angular/core";
import {ScriptStore} from "./script.store";
declare var document: any;
@Injectable()
export class Script {
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);
}
});
}
}
इंजेक्षन ScriptService
भी आप यह और जरूरत है इस तरह लोड स्क्रिप्ट:
constructor(
private scriptService: ScriptService
) { }
ngOnInit() {
this.scriptService.load('filepicker', 'rangeSlider').then(data => {
console.log('script loaded ', data);
}).catch(error => console.log(error));
}
स्रोत
2017-03-13 14:27:45
धन्यवाद त्वरित प्रतिक्रिया के लिए। मैं कोणीय के लिए नया हूं और मुझे आपकी प्रतिक्रिया पूरी तरह से समझ में नहीं आया। क्या आप प्लंकर उदाहरणों के साथ अपने अद्यतन प्रश्न पर एक नज़र डाल सकते हैं? वास्तव में मदद की सराहना करते हैं! – Rishi
मैंने आपके प्लंकर पर एक नज़र डाली लेकिन साइट अभी नीचे है। मुझे लगता है कि पहला मुद्दा यह है कि आपको घटक के टेम्पलेट में 'स्क्रिप्ट' टैग शामिल नहीं होना चाहिए क्योंकि कोणीय उन्हें बाहर निकाल देता है। तीसरे भाग स्क्रिप्ट को 'index.html' में लोड किया जाना चाहिए। एक बार प्लंकर का बैक अप लेने के बाद मैं एक और नजर डालेगा। –
हालांकि मैं देखना चाहता हूं कि यह index.html में स्क्रिप्ट को शामिल करके कैसे काम करता है, मैं अपने घटक के साथ स्क्रिप्ट को आलसी लोड करना पसंद करूंगा। इस विशेष मामले में, मुझे अपने घटक में वेब से लोड की गई स्क्रिप्ट के वैश्विक चरों तक पहुंचने की भी आवश्यकता है। – Rishi