Upgrade to Pro — share decks privately, control downloads, hide ads and more …

angular#4

 angular#4

Avatar for Danila Marchenkov

Danila Marchenkov

September 06, 2017
Tweet

More Decks by Danila Marchenkov

Other Decks in Education

Transcript

  1. All injected service dependencies are singletons meaning that, for a

    given dependency injector, there is only one instance of service
  2. @NgModule({ imports: [ CommonModule ], declarations: [ SidebarComponent, MailboxComponent, ],

    providers: [ SomeService ] }) export class ComponentsModule {}
  3. { provide: Hero, useValue: someHero }, { provide: TITLE, useValue:

    'Hero of the Month' }, { provide: HeroService, useClass: HeroService }, { provide: LoggerService, useClass: DateLoggerService }, { provide: MinimalLogger, useExisting: LoggerService }, { provide: RUNNERS_UP, useFactory: runnersUpFactory(2),
  4. useFactory export function runnersUpFactory(take: number) { return (winner: Hero, heroService:

    HeroService): string => { /* ... */ }; }; { provide: RUNNERS_UP, useFactory: runnersUpFactory(2), deps: [Hero, HeroService] }
  5. Allows to refer to references which are not yet defined.

    For instance, forwardRef is used when the token which we need to refer to for the purposes of DI is declared, but not yet defined. It is also used when the token which we use when creating a query is not yet defined. class Door { lock: Lock; // Door attempts to inject Lock, despite it not being defined yet. // forwardRef makes this possible. constructor(@Inject(forwardRef(() => Lock)) lock: Lock) { this.lock = lock; } } // Only at this point Lock is defined. class Lock {} const injector = ReflectiveInjector.resolveAndCreate([Door, Lock]); const door = injector.get(Door); expect(door instanceof Door).toBeTruthy(); expect(door.lock instanceof Lock).toBeTruthy(); forwardRef