Я создаю script.service.ts
сервис для добавления JS после загрузки страницы.Но иногда это работает, а иногда нет.
Я прикрепил весь свой код к файлу script.service.ts
.Пожалуйста, просмотрите и помогите мне.
home.component.html -> здесь я показываю карусель.
<ul class="jobcatgoryslide">
<div class="carousel js-flickity" data-flickity-options='{ "cellAlign": "right" , "contain": "true", "pageDots": "false" , "autoPlay": 1500 }'>
<li class="carousel-cell" *ngFor="let competency of competenciesList?.competencyList">
<div class="categoryBlock">
<div class="cateIcon">
<img [src]="competency.image | image:competenciesList.s3_img_url" height="64">
</div>
<h3>{{ competency.title_en }}</h3>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque</p>
</div>
</li>
</div>
</ul>
home.component.ts -> здесь я использую сервис сценариев.
this.script.load('flickity').then(data => {
console.log(data);
}).catch(error => console.log(error));
script.service.ts -> это файл службы сценариев.
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);
}
});
}
}
script.store.ts -> здесь файл хранилища сценариев
interface Scripts {
name: string;
src: string;
}
export const ScriptStore: Scripts[] = [
{ name: 'flickity', src: '/assets/js/slider.js' }
];
ПожалуйстаПомоги мне.Спасибо заранее.