图书馆服务中的Angular 6注入窗口令牌

时间:2018-09-26 22:34:19

标签: angular6 window-object angular-library

我有一个图书馆,提供此网站帖子中的代码: https://brianflove.com/2018/01/11/angular-window-provider/

在我的库中,我还有一个服务,可以访问窗口对象。但是,在构造函数中添加以下内容无效:

@Inject(WINDOW) private window: Window

尝试使用cli构建库时,发生以下错误:

  

收集的元数据包含一个错误,该错误将在运行时报告:   无法解析窗口类型。

我可以将其更改为使用任何类型,而不是Window,或者添加@dynamic作为注释,然后它会生成OK。有更好的方法吗?

我不确定这是否是正确的方法,因为它还依赖消费者在其主应用程序模块提供程序数组中设置WINDOW_PROVIDERS。

1 个答案:

答案 0 :(得分:0)

我正在使用相同的服务,并且正在像这样注入它:

@Inject(WINDOW) private _window: Window

请注意window变量前面的下划线(_)。我怀疑您无法命名变量窗口,因为这将与内置的浏览器窗口对象冲突。 除此之外,请确保要在组件/服务中这样导入注入令牌:

import { WINDOW } from '[path to your services]/window.service';

在您的app.module.ts中(或在其中使用它的任何模块中):

import { WINDOW_PROVIDERS } from '[path to your services]/window.service';
...
  providers: [
    WINDOW_PROVIDERS
  ]
...