以下适用于 Angular 5.2.7:
所需的进口是:
import { Inject, AfterViewInit, ElementRef } from '@angular/core';
import { DOCUMENT } from '@angular/common';
实现 AfterViewInit:
export class HeroesComponent implements AfterViewInit {
如果你的组件实现了多个接口,用逗号分隔它们;例如:
export class HeroesComponent implements OnInit, AfterViewInit {
将以下参数传递给构造函数:
constructor(@Inject(DOCUMENT) private document, private elementRef: ElementRef) { }
添加视图生命周期的 ngAfterViewInit 方法:
ngAfterViewInit() {
const s = this.document.createElement('script');
s.type = 'text/javascript';
s.src = '//external.script.com/script.js';
const __this = this; //to store the current instance to call
//afterScriptAdded function on onload event of
//script.
s.onload = function () { __this.afterScriptAdded(); };
this.elementRef.nativeElement.appendChild(s);
}
添加 afterScriptAdded 成员函数。
外部脚本加载成功后会调用该函数。所以你想从外部 js 中使用的属性或函数将在这个函数的主体中被访问。
afterScriptAdded() {
const params= {
width: '350px',
height: '420px',
};
if (typeof (window['functionFromExternalScript']) === 'function') {
window['functionFromExternalScript'](params);
}
}