Angular2相当于$ document.ready()
简单的问题,我希望。
我希望在$ document.ready()的Angular2等价物被激发时运行一个脚本。 达到这个目标的最好方法是什么?
我已经尝试把脚本放在index.html
的末尾,但是我发现这不起作用! 我认为它必须进行某种组件声明?
是否有可能从.js
文件运行加载脚本?
编辑 – 代码:
我有以下js和css插件注入我的应用程序(从铸造HTML主题 )。
<link href="css/themify-icons.css" rel="stylesheet" type="text/css" media="all" /> <link href="css/bootstrap.css" rel="stylesheet" type="text/css" media="all" /> ... <script src="js/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/flexslider.min.js"></script> ... <script src="js/scripts.js"></script> //This initiates all the plugins
如上所述,scripts.js“实例化”整个事情,因此需要在Angular准备好之后运行。 的script.js
得到它的工作:
import {Component, AfterViewInit} from 'angular2/core'; @Component({ selector: 'home', templateUrl: './components/home/home.html' }) export class HomeCmp implements AfterViewInit { ngAfterViewInit() { //Copy in all the js code from the script.js. Typescript will complain but it works just fine }
你可以在你的Angular根组件的ngOnInit()
中自己触发一个事件,然后在Angular之外监听这个事件。
这是Dart代码(我不知道TypeScript),但不应该很难翻译
@Component(selector: 'app-element') @View( templateUrl: 'app_element.html', ) class AppElement implements OnInit { ElementRef elementRef; AppElement(this.elementRef); void ngOnInit() { DOM.dispatchEvent(elementRef.nativeElement, new CustomEvent('angular-ready')); } }
从Chris复制答案:
得到它的工作:
import {AfterViewInit} from 'angular2/core'; export class HomeCmp implements AfterViewInit { ngAfterViewInit() { //Copy in all the js code from the script.js. Typescript will complain but it works just fine }
我去了这个解决scheme,所以我不必将我的自定义js代码包含在jQuery $ .getScript函数以外的组件中。
注意:对jQuery有依赖性。 所以你将需要jQuery和jQuerytypes。
我发现这是一个很好的方式来解决自定义或供应商的js文件,没有types的可用TypeScript不会尖叫你,当你去启动你的应用程序。
import { Component,AfterViewInit} from '@angular/core' @Component({ selector: 'ssContent', templateUrl: 'app/content/content.html', }) export class ContentComponent implements AfterViewInit { ngAfterViewInit(){ $.getScript('../js/myjsfile.js'); } }
更新实际上,在我的场景中,OnInit生命周期事件效果更好,因为它阻止了在加载视图之后加载脚本,ngAfterViewInit就是这种情况,并导致视图在加载脚本之前显示不正确的元素位置。
ngOnInit() { $.getScript('../js/mimity.js'); }
为了在Angular中使用jQuery,只声明$,如下所示: declare var $:any;