В этом подходе нет необходимости в каких-либо дополнительных модулей загрузчика.
Смотрите пример (проверьте консоль WooHoo): http://plnkr.co/edit/gfUs4Uhe8kMGzPxwpBay?p=preview обновленный plunker: https://plnkr.co/edit/leG062tg7uX8sLrA0i2i?p=preview
Вы можете LazyLoad некоторые JS, добавив URL скрипта вам документ:
Создать my-lazy-load.function.ts
:
export function lazyload(url) {
// based on https://friendlybit.com/js/lazy-loading-asyncronous-javascript/
let scripts = document.getElementsByTagName('script');
for (let i = scripts.length; i--;) {
if (scripts[i].src.match(url)) return true;
}
let s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = url;
let x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
return true;
}
В вашей компании о том, что вы хотите добавить плуп:
import {lazyload} from "./my-lazy-load.function.ts";
export class MyComponent implements OnInit {
pluploadInterval:number = null;
hasPlupload: boolean = false;
ngOnInit() {
lazyload("https://cdnjs.cloudflare.com/ajax/libs/plupload/2.3.1/plupload.full.min.js");
this.pluploadInterval = window.setInterval(()=>{
if(window.plupload) { // you can check existence of plupload object any way you want
// Woohoo, I am ready to be used
this.hasPlupload = true; // everything is run outside ngZone, wrap it if angular2 is not reacting to changes, or change window.setInterval to setInterval
window.clearInterval(this.pluploadInterval); // don't forget to clean interval
}
}, 100); // timeinterval can vary
....
Браузер автоматически загрузит это изображение.
Уведомление if(plupload)
Предполагается, что добавлен глобальный объект plupload, который добавляет скрипт (я не знаю, действительно ли он добавлен, проверьте свой рабочий пример в чистом javascript). Как это расширение JQuery вы можете проверить это прототип, как это: jQuery test for whether an object has a method?
OLD ИСТОРИЧЕСКИЙ: @Reid здесь plunker: https://plnkr.co/edit/zDWWQbTQUSHBqCsrUMUi?p=preview plupload фактически загружен, но добавил требовать с define("plupload", ['./moxie'], extract);
Я не уверен, что на данный момент как извлечь оттуда и какой пакет требует принадлежим ... коду для нахождения правильного загрузчика модуля принадлежит plupload себя, здесь (от plupload.dev.js):
if (typeof define === "function" && define.amd) {
define("plupload", ['./moxie'], extract);
} else if (typeof module === "object" && module.exports) {
module.exports = extract(require('./moxie'));
} else {
global.plupload = extract(global.moxie);
}
Hi Reid. Вам все еще нужна помощь? – AngularChef
@AngularFrance Он еще не решен. Поэтому я хотел бы, чтобы кто-то дал ответ. Если у вас есть это, это будет набухать. В противном случае, если никто не придет с относительно полным ответом, я буду работать над ним в ближайшие несколько дней, и если удастся, отправьте мой ответ. – Reid
Я бы хотел нанести удар. Вы упоминаете файл сценария Pupload CDN и не испытываете проблем с использованием Pupload в обычной JS-среде, можете ли вы указать URL-адрес файла сценария CDN и, возможно, ссылку на простой пример JS Pupload, который вы хотите интегрировать с Angular? – AngularChef