Ionic3 TypeScript/Angular项目报错:No provider for Sugerir
解决"No provider for Sugerir"错误的排查步骤
嘿,这个错误我之前也碰到过,典型的Angular依赖注入找不到提供者的问题。咱们一步步来排查:
首先,这个错误本质是Angular的依赖注入系统找不到你要注入的Sugerir的实例提供者。既然其他页面(包括Sugerir.ts本身)能正常运行,说明Sugerir自身的配置是没问题的,问题肯定出在novolocal.ts所在的组件/模块配置上。
第一步:先明确Sugerir的类型
先搞清楚Sugerir到底是服务(Service)还是组件/指令(Component/Directive),这两种情况的解决方式完全不同:
情况1:Sugerir是服务(Service)
如果你的novolocal.ts里在构造函数中注入了Sugerir服务,比如:
constructor(private sugerir: Sugerir) { }
那检查这几点:
- 查看
Sugerir服务的装饰器是否配置了providedIn: 'root'(全局注册):
如果没有这行,那要确保@Injectable({ providedIn: 'root' // 这行确保服务在全局所有模块可用 }) export class SugerirService { ... }novolocal.ts所在的模块(比如NovolocalModule)的providers数组里添加了SugerirService:@NgModule({ declarations: [NovolocalPage], imports: [...], providers: [SugerirService] // 在这里注册服务 }) export class NovolocalModule { } - 还要检查
novolocal.ts里的导入路径是否正确,有没有把服务和组件搞混(比如不小心导入了SugerirComponent而不是SugerirService)。
情况2:Sugerir是组件/指令(Component/Directive)
如果novolocal.ts的构造函数里直接注入了Sugerir组件,这是错误的用法!组件不能通过构造函数注入,只能通过模板引用+@ViewChild/@ContentChild获取:
// ❌ 错误写法: constructor(private sugerir: SugerirComponent) { } // ✅ 正确写法: @ViewChild(SugerirComponent) sugerir!: SugerirComponent; ngAfterViewInit() { // 在这里访问sugerir实例 }
另外,还要确保novolocal.ts所在的模块已经导入了包含SugerirComponent的模块,或者在模块的declarations数组里声明了它(不过其他页面能用的话,这点应该已经做到了)。
第二步:检查模块导入关系
如果Sugerir所在的模块是一个独立的功能模块(比如SugerirModule),那要确保NovolocalModule的imports数组里导入了这个模块:
@NgModule({ imports: [ ..., SugerirModule // 导入包含Sugerir的模块 ] }) export class NovolocalModule { }
最后:清理缓存再测试
有时候Angular的缓存会导致奇怪的依赖问题,执行以下命令清理后重新运行:
ionic cordova clean npm run build --prod
内容的提问来源于stack exchange,提问作者Celty
相关产品推荐
相关产品推荐

