Skip to content

Commit 1644673

Browse files
thelgevoldwardbell
authored andcommitted
docs(dependency-injection): show providers using map literals
1 parent 7f1412c commit 1644673

File tree

9 files changed

+193
-62
lines changed

9 files changed

+193
-62
lines changed

public/docs/_examples/cb-dependency-injection/e2e-spec.js

+13-3
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,16 @@ describe('Dependency Injection Cookbook', function () {
3434
expect(sortedHero).toBeDefined();
3535
});
3636

37-
it('should render Hero of the Month', function () {
37+
it('should render Hero of the Month when DI deps are defined using provide()', function () {
3838
var heroOfTheMonth = element.all(by.xpath('//h3[text()="Hero of the month"]')).get(0);
3939
expect(heroOfTheMonth).toBeDefined();
4040
});
4141

42+
it('should render Hero of the Month when DI deps are defined using provide object literal', function () {
43+
var heroOfTheMonth = element.all(by.xpath('//h3[text()="Hero of the month 2"]')).get(0);
44+
expect(heroOfTheMonth).toBeDefined();
45+
});
46+
4247
it('should render Hero Bios', function () {
4348
var heroBios = element.all(by.xpath('//h3[text()="Hero Bios"]')).get(0);
4449
expect(heroBios).toBeDefined();
@@ -54,8 +59,13 @@ describe('Dependency Injection Cookbook', function () {
5459
expect(magmaPhone).toBeDefined();
5560
});
5661

57-
it('should render Hero-of-the-Month runner-ups', function () {
58-
var runnersUp = element(by.id('rups')).getText();
62+
it('should render Hero-of-the-Month runner-ups when DI deps are defined using provide()', function () {
63+
var runnersUp = element(by.id('rups1')).getText();
64+
expect(runnersUp).toContain('RubberMan, Mr. Nice');
65+
});
66+
67+
it('should render Hero-of-the-Month runner-ups when DI deps are defined using provide object literal', function () {
68+
var runnersUp = element(by.id('rups2')).getText();
5969
expect(runnersUp).toContain('RubberMan, Mr. Nice');
6070
});
6171

public/docs/_examples/cb-dependency-injection/ts/app/app.component.html

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ <h3>Hero Bios and Contacts</h3>
2323
<hero-of-the-month></hero-of-the-month>
2424
</div>
2525

26+
<div class="di-component">
27+
<hero-of-the-month-lit></hero-of-the-month-lit>
28+
</div>
2629

2730
<div class="di-component">
2831
<h3>Unsorted Heroes</h3>
@@ -36,4 +39,4 @@ <h3>Sorted Heroes</h3>
3639

3740
<div class="di-component">
3841
<parent-finder></parent-finder>
39-
</div>
42+
</div>

public/docs/_examples/cb-dependency-injection/ts/app/app.component.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@ import { HeroesBaseComponent,
99
import { HighlightDirective } from './highlight.directive';
1010
import { ParentFinderComponent } from './parent-finder.component';
1111

12+
// Object Literal syntax
13+
import { HeroOfTheMonthLiteralsComponent } from './hero-of-the-month-literals.component';
14+
1215
const DIRECTIVES = [
1316
HeroBiosComponent, HeroBiosAndContactsComponent,
1417
HeroesBaseComponent, SortedHeroesComponent,
15-
HeroOfTheMonthComponent,
18+
HeroOfTheMonthComponent, HeroOfTheMonthLiteralsComponent,
1619
HighlightDirective,
1720
ParentFinderComponent
1821
];
@@ -24,7 +27,7 @@ import { UserService } from './user.service';
2427

2528
@Component({
2629
selector: 'my-app',
27-
templateUrl:'app/app.component.html',
30+
templateUrl: 'app/app.component.html',
2831
directives: DIRECTIVES,
2932
// #docregion providers
3033
providers: [LoggerService, UserContextService, UserService]
@@ -33,10 +36,10 @@ import { UserService } from './user.service';
3336
export class AppComponent {
3437
// #enddocregion import-services
3538

36-
private userId:number = 1;
39+
private userId: number = 1;
3740

3841
// #docregion ctor
39-
constructor(logger:LoggerService, public userContext:UserContextService) {
42+
constructor(logger: LoggerService, public userContext: UserContextService) {
4043
userContext.loadUser(this.userId);
4144
logger.logInfo('AppComponent initialized');
4245
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/* tslint:disable:one-line:check-open-brace*/
2+
// #docplaster
3+
// #docregion opaque-token
4+
import { OpaqueToken } from '@angular/core';
5+
6+
export const TITLE = new OpaqueToken('title');
7+
// #enddocregion opaque-token
8+
9+
// #docregion hero-of-the-month
10+
import { Component, Inject } from '@angular/core';
11+
12+
import { DateLoggerService,
13+
MinimalLogger } from './date-logger.service';
14+
import { Hero } from './hero';
15+
import { HeroService } from './hero.service';
16+
import { LoggerService } from './logger.service';
17+
import { RUNNERS_UP,
18+
runnersUpFactory } from './runners-up';
19+
20+
// #enddocregion hero-of-the-month
21+
// #docregion some-hero
22+
const someHero = new Hero(42, 'Magma', 'Had a great month!', '555-555-5555');
23+
// #enddocregion some-hero
24+
25+
const template = `
26+
<h3>{{title}}</h3>
27+
<div>Winner: <strong>{{heroOfTheMonth.name}}</strong></div>
28+
<div>Reason for award: <strong>{{heroOfTheMonth.description}}</strong></div>
29+
<div>Runners-up: <strong id="rups2">{{runnersUp}}</strong></div>
30+
31+
<p>Logs:</p>
32+
<div id="logs">
33+
<div *ngFor="let log of logs">{{log}}</div>
34+
</div>
35+
`;
36+
37+
// #docregion hero-of-the-month
38+
@Component({
39+
selector: 'hero-of-the-month-lit',
40+
template: template,
41+
// #docregion providers-using-object-literals
42+
providers: [
43+
{provide: Hero, useValue: someHero},
44+
{provide: TITLE, useValue: 'Hero of the Month - Object Literals'},
45+
{provide: HeroService, useClass: HeroService},
46+
{provide: LoggerService, useClass: DateLoggerService},
47+
{provide: MinimalLogger, useExisting: LoggerService},
48+
{provide: RUNNERS_UP, useFactory: runnersUpFactory(2), deps: [Hero, HeroService]}
49+
]
50+
// #enddocregion providers-using-object-literals
51+
})
52+
export class HeroOfTheMonthLiteralsComponent {
53+
logs: string[] = [];
54+
55+
// #docregion ctor-signature
56+
constructor(
57+
logger: MinimalLogger,
58+
public heroOfTheMonth: Hero,
59+
@Inject(RUNNERS_UP) public runnersUp: string,
60+
@Inject(TITLE) public title: string)
61+
// #enddocregion ctor-signature
62+
{
63+
this.logs = logger.logs;
64+
logger.logInfo('starting up');
65+
}
66+
}
67+
// #enddocregion hero-of-the-month

public/docs/_examples/cb-dependency-injection/ts/app/hero-of-the-month.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const template = `
2626
<h3>{{title}}</h3>
2727
<div>Winner: <strong>{{heroOfTheMonth.name}}</strong></div>
2828
<div>Reason for award: <strong>{{heroOfTheMonth.description}}</strong></div>
29-
<div>Runners-up: <strong id="rups">{{runnersUp}}</strong></div>
29+
<div>Runners-up: <strong id="rups1">{{runnersUp}}</strong></div>
3030
3131
<p>Logs:</p>
3232
<div id="logs">

public/docs/_examples/dependency-injection/e2e-spec.js

+5
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ describe('Dependency Injection Tests', function () {
8888
expectedMsg = 'Hello from logger provided with useClass';
8989
expect(element(by.css('#p3')).getText()).toEqual(expectedMsg);
9090
});
91+
92+
it('P3a (provide) displays as expected', function () {
93+
expectedMsg = 'Hello from logger provided with {provide: Logger, useClass: Logger}';
94+
expect(element(by.css('#p3a')).getText()).toEqual(expectedMsg);
95+
});
9196

9297
it('P4 (useClass:BetterLogger) displays as expected', function () {
9398
expectedMsg = 'Hello from logger provided with useClass:BetterLogger';

0 commit comments

Comments
 (0)