这对我目前工作(2017-01,角度2.1.2与AoT,测试角度cli和自定义webpack构建):
首先,创建一个注入服务,提供对窗口的引用:
import { Injectable } from '@angular/core'; function getWindow (): any { return window; } @Injectable() export class WindowRefService { get nativeWindow (): any { return getWindow(); } }
现在,使用您的根AppModule注册该服务,以便它可以注入无处不在:
import { WindowRefService } from './window-ref.service'; @NgModule({ providers: [ WindowRefService ],... }) export class AppModule {}
然后稍后在你需要注入窗口:
import { Component} from '@angular/core'; import { WindowRefService } from './window-ref.service'; @Component({ ... }) export default class MyCoolComponent { private _window: Window; constructor ( windowRef: WindowRefService ) { this._window = windowRef.nativeWindow; } public doThing (): void { let foo = this._window.XMLHttpRequest; } ...
编辑:更新与Truchainz建议。编辑2:更新为角度2.1.2编辑3:添加了AoT注释编辑4:添加任何类型的解决办法说明edit5:更新的解决方案使用WindowRefService修复了一个错误,我得到时使用以前的解决方案与不同的构建