【Angular】[Debugging] NullInjectorError: No provider for {Class}!
问题现象:控制台报错(NullInjectorError)
一句话总结:你想要用某个类A
的功能,并将它在constructor
实例化了,但是Angular
在injector
列表中没有找到这个A
类,所以不知道怎么提供这个类。
解决方式:
在类A
头上添加Injectable
装饰符,并配置好providedIn
等相关参数。或者在模块的ngModule
装饰符的providers
数组中添加A
类,如果是类A
来自第三方,则是在模块的ngModule
装饰符的imports
数组中添加该类所在的模块。
方式一:Injectable
方式二:providers
方式三:imports,仅针对三方引入
解释:
任何类想要被引用(在constructor
中实例化),都需要在Angular
的injector
列表注册,注册方式之一就是使用Injectable
装饰符,也是官方推荐方式;另一种就是在模块的providers
中注明。两种方式都可以配置作用域,使类在不同的作用域生效。
injector列表
:
配置不同作用域: