Angular 8:无法实例化循环依赖 - ActivatedRoute

Jga*_*ona 6 cyclic-dependency angular

我正在尝试将APP_INITIALIZERAngular集成到我的项目中,以便在启动应用程序之前执行一些功能。当我在我的服务中使用来自 Angular的ActivatedRoute时,问题就出现了。

错误是:

Error: Provider parse errors:
Cannot instantiate cyclic dependency! ApplicationRef ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1
Run Code Online (Sandbox Code Playgroud)

我想我在内部使用了两次导入或类似的东西。基本上我尝试了一些其他配置,但最后总是抛出同样的错误。

STACKBLITZ 示例: https ://stackblitz.com/edit/angular-bhpe7m

预期行为:只是为了能够通过 ActivatedRoute 服务检索一些 QueryParams 并在运行 Angular 应用程序之前使用它们执行一些功能

小智 12

确保在 app.module.ts 中包含 HttpClientModule

import { HttpClientModule } from '@angular/common/http';

@NgModule({
   declarations: [
      AppComponent
   ],
   imports: [
      BrowserModule,
      AppRoutingModule,
      HttpClientModule
   ],
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)


yan*_*nky 6

解决您的问题,只需从您的“appLoaderService”中删除路由器

  constructor(private route: ActivatedRoute) {} // remove this dependency

Run Code Online (Sandbox Code Playgroud)

由于您在初始化应用程序的配置中注入路由,因此您将获得循环依赖。

参考这个

简单地,删除它,因为您无论如何都没有使用它。

但是,如果您在引导组件加载之前缩进使用路由,则可以使用解析器或防护。

如前所述,不可能在 APP_INITIALIZER 中使用路由,*虽然有办法**,但我最好建议使用解析器,如下所示:

resolve(route: ActivatedRouteSnapshot): Promise<any> {
    const promise = new Promise((resolve, reject) => {
      if (route) {
        console.log(route.params);
        console.log(route.queryParams);
      }
 }
return promise;
}

Run Code Online (Sandbox Code Playgroud)

参考解析器

编辑 这是将代码放入解析器后您将拥有的内容:

在此处输入图片说明