mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-07 08:57:19 +08:00
54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
interface ProxyLoader {
|
|
loadCss(src: string): any
|
|
loadScript(src: string): Promise<any>
|
|
loadScriptConcurrent(src: Array<string>): Promise<any>
|
|
}
|
|
|
|
class loaderProxy implements ProxyLoader {
|
|
|
|
constructor() { }
|
|
|
|
protected scriptLoaderCache: Array<string> = []
|
|
|
|
public loadCss = (src: string): any => {
|
|
let element = document.createElement("link")
|
|
element.rel = "stylesheet"
|
|
element.href = src
|
|
document.body.appendChild(element)
|
|
}
|
|
|
|
public loadScript = async (src: string): Promise<any> => {
|
|
if (this.scriptLoaderCache.includes(src)) {
|
|
return src
|
|
} else {
|
|
let element: Element = document.createElement("script")
|
|
element.src = src
|
|
document.body.appendChild(element)
|
|
element.onload = () => {
|
|
return this.scriptLoaderCache.push(src)
|
|
}
|
|
}
|
|
}
|
|
|
|
public loadScriptConcurrent = async (srcList: Array<string>): Promise<any> => {
|
|
if (Array.isArray(srcList)) {
|
|
const len: number = srcList.length
|
|
if (len > 0) {
|
|
let count: number = 0
|
|
srcList.map(src => {
|
|
if (src) {
|
|
this.loadScript(src).then(() => {
|
|
count++
|
|
if (count === len) {
|
|
return
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
export const loader = new loaderProxy() |