我不经常进行 Angular 开发。关于
@Injectable()
装饰器,我了解到的一件事是它意味着 -
和不是
我无法立即参考任何具体来源(记性不好,变老),但它来自在线文章,可能是一些教程。顺便说一句,我说的是一个空的
@Injectable()
,而不是具有 provided-in
属性的。
无论如何,看起来 Angular 文档的叙述是一致的,以反映后来的含义。 这里它说装饰器的目的是
还有这里那个-
@Injectable()
装饰器指定Angular可以在DI系统中使用此类。所以:
@Injectable()
装饰器实际上表示什么?@Injectable()
的含义是“这个类可以作为依赖项注入”,那么我为什么可以使用服务类而无需@Injectable()
装饰器作为依赖项并且它仍然可以正常工作?该类是可以注入的依赖项,但请注意,如果没有
providedIn
属性,则必须将服务添加到提供者数组中,以便它对于依赖项注入可见!
我希望看到这种情况发生,你只能使用类作为
const someClass = new SomeClass()
,或者你可以创建静态方法并像SomeClass.someMethod
一样访问它们,其中方法将被定义为static someMethod() {...}
,所以类无法用于依赖注入,因为 @Injectable()
指示 Angular 框架该类是一个服务,同样适用于 @Component
或 @Directive
,这就是注册 Angular 组件并使用它们的方式,否则它们就是 javascript 类,仅此而已!
普通 JS 类和 Angular 服务之间的区别在于
当您创建像
const someClass = new SomeClass()
这样的类时,它会创建一个新实例,因此该实例将拥有自己的一组属性和方法,这些对其他实例不可见。
当您在 DI 中声明服务时,单例将被共享到当前元素/模块,该元素/模块在提供者数组中具有该服务,并且对于所有子元素,相同的实例被共享。 ProvidedIn 意味着单个实例在整个应用程序中使用!