创建Angular Provider后出现StaticInjectorError错误求助
解决Angular StaticInjectorError:服务错误注册导致的依赖注入问题
我一眼就定位到了问题的核心——你把NewsRepositoryProvider这个服务错误地加到了AppModuleShared的declarations数组里,这完全不符合Angular的模块规则!
问题分析
Angular模块的declarations数组只能用来注册组件、指令、管道这三类可声明对象,而服务的正确注册方式只有两种:
- 使用
@Injectable({ providedIn: 'root' })装饰器(你已经这么做了,这个配置会自动把服务注册到根注入器,无需额外操作); - 若不使用
providedIn,才需要手动将服务加到模块的providers数组中。
把服务放到declarations里会让Angular错误地把它当成组件/指令去处理,触发完全混乱的依赖解析流程——这就是为什么你会看到和LocationStrategy、PlatformLocation相关的奇怪错误:Angular在试图给这个“假组件”解析路由相关依赖,但你的服务根本不需要这些!
修复步骤
- 移除错误注册:从
AppModuleShared的declarations数组中删掉NewsRepositoryProvider,因为你已经用了providedIn: 'root',不需要再手动注册到模块里。 - 验证注入逻辑:你的组件构造函数注入服务的写法是正确的,修复模块后就能正常调用服务方法。
修改后的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
相关产品推荐
相关产品推荐

