如何将窗口注入Angular 2.1.0

tt9*_*tt9 9 dependency-injection angular

在Angular 2的早期RC版本中,我能够通过添加注入窗口对象

{provide: Window, useValue: window}

到提供者数组.

由于升级到角度2(2.1.0)的最新稳定版本,现在抛出控制台错误

compiler.umd.js:14268Uncaught错误:无法解析LoginComponent的所有参数:(AuthService,UserMessagesService,?).

的?在参数列表中是我试图注入Window对象的地方.

Vla*_*vic 17

试试:

@NgModule({
  declarations: [...],
  imports: [...],
  providers: [
   { provide: "windowObject", useValue: window}
  ]
})
Run Code Online (Sandbox Code Playgroud)

出口类HomeModule {}

在您的组件中:

constructor(@Inject("windowObject") window: Window})
Run Code Online (Sandbox Code Playgroud)

  • 看来窗口对象不可移植... https://github.com/angular/angular/pull/12694#issuecomment-258348560 (2认同)

Joh*_*ohn 13

为了使它能与AOT一起使用,你需要使用useFactory而不是useValue:

export function windowFactory() {
  return window;
}
Run Code Online (Sandbox Code Playgroud)

模块:

providers: [
   { provide: 'window', useFactory: windowFactory }
]
Run Code Online (Sandbox Code Playgroud)

零件:

constructor(@Inject('window') window: Window})
Run Code Online (Sandbox Code Playgroud)