• Overview
@angular/core

Injectable

decorator

Decorator that marks a class as available to be provided and injected as a dependency.

API

  
    @Injectable ({})
  
  

providedIn

Type<any> | "root" | "platform" | "any" | null | undefined

Determines which injectors will provide the injectable.

  • Type<any> - associates the injectable with an @NgModule or other InjectorType. This option is DEPRECATED.
  • 'null' : Equivalent to undefined. The injectable is not provided in any scope automatically and must be added to a providers array of an @NgModule, @Component or @Directive.

The following options specify that this injectable should be provided in one of the following injectors:

  • 'root' : The application-level injector in most apps.
  • 'platform' : A special singleton platform injector shared by all applications on the page.
  • 'any' : Provides a unique instance in each lazy loaded module while all eagerly loaded modules share one instance. This option is DEPRECATED.

Usage Notes

Marking a class with @Injectable ensures that the compiler will generate the necessary metadata to create the class's dependencies when the class is injected.

The following example shows how a service class is properly marked so that a supporting service can be injected upon creation.

          
@Injectable()        class UsefulService {}        @Injectable()        class NeedsService {          constructor(public service: UsefulService) {}        }        const injector = Injector.create({          providers: [            {provide: NeedsService, deps: [UsefulService]},            {provide: UsefulService, deps: []},          ],        });        expect(injector.get(NeedsService).service instanceof UsefulService).toBe(true);
Jump to details