You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建Angular Provider后出现StaticInjectorError错误求助

解决Angular StaticInjectorError:服务错误注册导致的依赖注入问题

我一眼就定位到了问题的核心——你把NewsRepositoryProvider这个服务错误地加到了AppModuleShared的declarations数组里,这完全不符合Angular的模块规则!

问题分析

Angular模块的declarations数组只能用来注册组件、指令、管道这三类可声明对象,而服务的正确注册方式只有两种:

  1. 使用@Injectable({ providedIn: 'root' })装饰器(你已经这么做了,这个配置会自动把服务注册到根注入器,无需额外操作);
  2. 若不使用providedIn,才需要手动将服务加到模块的providers数组中。

把服务放到declarations里会让Angular错误地把它当成组件/指令去处理,触发完全混乱的依赖解析流程——这就是为什么你会看到和LocationStrategy、PlatformLocation相关的奇怪错误:Angular在试图给这个“假组件”解析路由相关依赖,但你的服务根本不需要这些!

修复步骤

  1. 移除错误注册:从AppModuleShared的declarations数组中删掉NewsRepositoryProvider,因为你已经用了providedIn: 'root',不需要再手动注册到模块里。
  2. 验证注入逻辑:你的组件构造函数注入服务的写法是正确的,修复模块后就能正常调用服务方法。

修改后的AppModuleShared代码:

@NgModule({
  declarations: [
    AppComponent,
    NavMenuComponent,
    NewsComponent,
    HomeComponent,
    ContactComponent,
    ProductsComponent,
    ApplicationsComponent,
    // 已移除错误添加的NewsRepositoryProvider
  ],
  imports: [
    CommonModule,
    HttpModule,
    FormsModule,
    RouterModule.forRoot([
      { path: '', redirectTo: 'home', pathMatch: 'full' },
      { path: 'home', component: HomeComponent },
      { path: 'applications', component: ApplicationsComponent },
      { path: 'contact', component: ContactComponent },
      { path: 'news', component: NewsComponent },
      { path: 'products', component: ProductsComponent },
      { path: '**', redirectTo: 'home' }
    ]),
    AngularFireModule.initializeApp(FIREBASE_CONFIG),
    AngularFireAuthModule,
    AngularFireDatabaseModule,
  ],
})
export class AppModuleShared { }

额外提示

从错误栈里的main-server.js来看,你应该在做服务器端渲染(SSR)。如果之后还有平台相关的注入错误,要确保BrowserModule只在浏览器模块中导入,ServerModule在服务器模块中导入,但当前的核心问题肯定是服务的错误注册导致的,先修复这个就能解决当前报错。

内容的提问来源于stack exchange,提问作者ChargerIIC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:53:11