Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:加载组件视图后加载extrenal JS文件脚本_Javascript_Angular_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 角度:加载组件视图后加载extrenal 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

在我的Anglar 5应用程序下,我有一个js脚本文件,我想在加载我的组件视图后动态加载它

这是因为我的脚本与我的组件模板一起工作,需要加载视图才能运行

我试过这个:

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
也不起作用