Javascript 角度:加载组件视图后加载extrenal JS文件脚本
在我的Anglar 5应用程序下,我有一个js脚本文件,我想在加载我的组件视图后动态加载它 这是因为我的脚本与我的组件模板一起工作,需要加载视图才能运行 我试过这个:Javascript 角度:加载组件视图后加载extrenal JS文件脚本,javascript,angular,typescript,ecmascript-6,Javascript,Angular,Typescript,Ecmascript 6,在我的Anglar 5应用程序下,我有一个js脚本文件,我想在加载我的组件视图后动态加载它 这是因为我的脚本与我的组件模板一起工作,需要加载视图才能运行 我试过这个: export class MyComponent implements AfterViewInit{ title = 'app'; ngAfterViewInit() { this.loadScript('http://www.some-library.com/library.js'); // OR
export class MyComponent implements AfterViewInit{
title = 'app';
ngAfterViewInit() {
this.loadScript('http://www.some-library.com/library.js');
// OR THIS
this.loadScript('../assets/js/my-library.js');
}
}
public loadScript(url: string) {
const body = <HTMLDivElement> document.body;
const script = document.createElement('script');
script.innerHTML = '';
script.src = url;
script.async = false;
script.defer = true;
body.appendChild(script);
}
}
导出类MyComponent实现AfterViewInit{
标题=‘应用程序’;
ngAfterViewInit(){
此.loadScript('http://www.some-library.com/library.js');
//还是这个
这个.loadScript('../assets/js/my library.js');
}
}
公共加载脚本(url:string){
const body=document.body;
const script=document.createElement('script');
script.innerHTML='';
script.src=url;
script.async=false;
script.defer=true;
body.appendChild(脚本);
}
}
但它仍然在加载我的组件HTML文件之前加载我的js,这会导致我的脚本无法运行
(我在身体上看到了,但实际上,它不起作用)
我的目的是在加载组件后加载js文件。
建议?使用
后容钩
AfterContent挂钩与AfterView挂钩类似。关键区别在于子组件
-AfterView挂钩涉及ViewChildren,即其元素标记出现在组件模板中的子组件
-AfterContent挂钩涉及ContentChildren,即投影到组件中的子组件
另一种方法:
我很早以前就解决了这个问题:
ngAfterViewInit() {
setTimeout(() => {
doSomething();
}, 0);
}
使用
setTimeout
5秒进行测试。它有效吗?@Gaspar come on这太脏了:)是的,但它只是测试hahaj必须使用ngOnInit()而不是ngAfterViewInit(),并在ngOnInit()中加载“loadScript()”{this.loadScript();}AfterViewInit
后调用OnInit
。如果AfterViewInit
不起作用,OnInit
也不起作用