【发布时间】:2019-02-20 05:59:50
【问题描述】:
现在我知道有一百万条关于 No Provider for such and such service 的帖子,我知道它需要进入提供者,请阅读我的整个帖子。
基本上我正在尝试使用SwUpdate 来检查是否有更新,如果有,请刷新浏览器:
import { SwUpdate } from '@angular/service-worker';
...
export class ...
constructor(
private _swUp: SwUpdate
){}
ngOnInit() {
this.checkForUpdate();
}
checkForUpdate() {
if (this._swUp.isEnabled) {
this._swUp.available
.subscribe(() => {
window.location.reload();
});
}
}
现在我已经注册了我的 serviceworker:
import { ServiceWorkerModule } from '@angular/service-worker';
...
imports: [
environment.production ? ServiceWorkerModule.register('ngsw-worker.js') : [],
]
现在当我运行我的应用程序时,我收到了这个错误:
NullInjectorError: No provider for SwUpdate!
显然我尝试将它添加到我的组件模块中的 providers 数组中:
import { ServiceWorkerModule, SwUpdate } from '@angular/service-worker';
...
imports: [
environment.production ? ServiceWorkerModule.register('ngsw-worker.js') : [],
],
providers: [
SwUpdate
]
现在这应该可以了,但是现在当我运行应用程序时出现以下错误:
NullInjectorError: No provider for NgswCommChannel!
现在,当我尝试导入 NgswCommChannel 时,我收到一条错误消息,指出它在 @angular/service-worker 中不存在;
我试过用谷歌搜索,但在任何地方都找不到对 NgswCommChanel 的引用...
所以我的问题是如何解决这个问题,或者如何正确使用SwUpdate??
任何帮助将不胜感激
编辑
我也尝试过与官方 Angular 文档中完全相同的方式进行操作,但它给了我同样的错误:
constructor(
updates: SwUpdate
) {
updates.available
.subscribe(() => {
updates.activateUpdate()
.then(() => document.location.reload());
});
}
编辑 2 这是我运行 ng -v 时得到的结果
Angular CLI: 1.7.4
Node: 10.15.1
OS: win32 x64
Angular: 5.1.2
... animations, common, compiler, compiler-cli, core, forms
... http, platform-browser, platform-browser-dynamic
... platform-server, router
@angular/cli: 1.7.4
@angular/service-worker: 7.2.7
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.0.40
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.10.2
typescript: 2.4.2
webpack: 3.11.0
编辑 3
经过进一步调查,在本地运行项目时似乎无法使用 SwUpdate,我看到了这篇文章 angular-pwa-pitfalls,解决方案是安装 ng-toolkit,但这只是允许您构建项目然后运行一个模拟服务器,这是没有意义的,因为我失去了在本地开发而不每次都构建项目的能力。
编辑 4
我更改了我的 app.module.ts 来注册 service worker:
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
但现在我遇到了一大堆新错误
任何其他建议都会很棒。
谢谢
【问题讨论】:
-
你试过检查official documentation在Angular中使用service worker吗?
-
@jess 是的...这就是为什么我要问为什么它不起作用,如果官方文档涵盖了我的问题,我不会发布。
-
您是否将您的 组件模块 导入到您的 AppModule 中?
-
@JohnVelasquez 是的.. 一切正常,然后当我将 SwUpdate 放入其中时,应用程序会崩溃
-
只有在本地运行时才会出现这种情况吗?
标签: angular typescript service-worker progressive-web-apps angular-pwa