76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
/* tslint:disable:one-line:check-open-brace*/
|
|
// #docplaster
|
|
// #docregion opaque-token
|
|
import { OpaqueToken } from '@angular/core';
|
|
|
|
export const TITLE = new OpaqueToken('title');
|
|
// #enddocregion opaque-token
|
|
|
|
// #docregion hero-of-the-month
|
|
import { Component, Inject } from '@angular/core';
|
|
|
|
import { DateLoggerService,
|
|
MinimalLogger } from './date-logger.service';
|
|
import { Hero } from './hero';
|
|
import { HeroService } from './hero.service';
|
|
import { LoggerService } from './logger.service';
|
|
import { RUNNERS_UP,
|
|
runnersUpFactory } from './runners-up';
|
|
|
|
// #enddocregion hero-of-the-month
|
|
// #docregion some-hero
|
|
const someHero = new Hero(42, 'Magma', 'Had a great month!', '555-555-5555');
|
|
// #enddocregion some-hero
|
|
|
|
const template = `
|
|
<h3>{{title}}</h3>
|
|
<div>Winner: <strong>{{heroOfTheMonth.name}}</strong></div>
|
|
<div>Reason for award: <strong>{{heroOfTheMonth.description}}</strong></div>
|
|
<div>Runners-up: <strong id="rups1">{{runnersUp}}</strong></div>
|
|
|
|
<p>Logs:</p>
|
|
<div id="logs">
|
|
<div *ngFor="let log of logs">{{log}}</div>
|
|
</div>
|
|
`;
|
|
|
|
// #docregion hero-of-the-month
|
|
@Component({
|
|
selector: 'hero-of-the-month',
|
|
template: template,
|
|
providers: [
|
|
// #docregion use-value
|
|
{ provide: Hero, useValue: someHero },
|
|
// #docregion provide-opaque-token
|
|
{ provide: TITLE, useValue: 'Hero of the Month' },
|
|
// #enddocregion provide-opaque-token
|
|
// #enddocregion use-value
|
|
// #docregion use-class
|
|
{ provide: HeroService, useClass: HeroService },
|
|
{ provide: LoggerService, useClass: DateLoggerService },
|
|
// #enddocregion use-class
|
|
// #docregion use-existing
|
|
{ provide: MinimalLogger, useExisting: LoggerService },
|
|
// #enddocregion use-existing
|
|
// #docregion provide-opaque-token, use-factory
|
|
{ provide: RUNNERS_UP, useFactory: runnersUpFactory(2), deps: [Hero, HeroService] }
|
|
// #enddocregion provide-opaque-token, use-factory
|
|
]
|
|
})
|
|
export class HeroOfTheMonthComponent {
|
|
logs: string[] = [];
|
|
|
|
// #docregion ctor-signature
|
|
constructor(
|
|
logger: MinimalLogger,
|
|
public heroOfTheMonth: Hero,
|
|
@Inject(RUNNERS_UP) public runnersUp: string,
|
|
@Inject(TITLE) public title: string)
|
|
// #enddocregion ctor-signature
|
|
{
|
|
this.logs = logger.logs;
|
|
logger.logInfo('starting up');
|
|
}
|
|
}
|
|
// #enddocregion hero-of-the-month
|