我有一个库,其中包含此网站帖子中的代码: https://brianflove.com/2018/01/11/angular-window-provider/
在我的库中,我还有一个服务,我想在其中访问窗口对象。但是,将以下内容添加到构造函数中不起作用:
@Inject(WINDOW) private window: Window
尝试使用 cli 构建库时,会发生以下错误:
收集的元数据包含将在运行时报告的错误: 无法解析窗口类型。
我可以将其更改为使用任何类型而不是 Window,或者添加@dynamic作为注释,然后它会构建 OK。有没有更好的方法
?我不确定这是否是正确的方法,因为它还依赖于消费者在其主应用程序模块提供程序数组中设置WINDOW_PROVIDERS。
我使用相同的服务,我像这样注入它:
@Inject(WINDOW) private _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
]
...