How to Inject Window into Angular 2.1.0

2019-02-09 07:09发布

In the earlier RC releases of Angular 2 I was able to inject the window object by adding

{provide: Window, useValue: window}

To the providers array.

Since upgrading to the latest stable release of angular 2 (2.1.0) this now throws a console error

compiler.umd.js:14268Uncaught Error: Can't resolve all parameters for LoginComponent: (AuthService, UserMessagesService, ?).

The ? in the parameter list is where I am trying to inject the Window object.

2条回答
甜甜的少女心
2楼-- · 2019-02-09 07:34

Try with:

@NgModule({
  declarations: [...],
  imports: [...],
  providers: [
   { provide: "windowObject", useValue: window}
  ]
})

export class HomeModule {}

in your component:

constructor(@Inject("windowObject") window: Window})
查看更多
手持菜刀,她持情操
3楼-- · 2019-02-09 07:39

In order for it to work with AOT you need to do useFactory instead of useValue:

export function windowFactory() {
  return window;
}

module:

providers: [
   { provide: 'window', useFactory: windowFactory }
]

component:

constructor(@Inject('window') window: Window})
查看更多
登录 后发表回答