From 695b72a972d727d77ae3bfc2a803935ce213d885 Mon Sep 17 00:00:00 2001 From: Kapunahele Wong Date: Wed, 3 Mar 2021 10:30:47 -0500 Subject: [PATCH] docs: imrpove accessibility of lifecycle hooks example (#41071) PR Close #41071 --- .../lifecycle-hooks/e2e/src/app.e2e-spec.ts | 19 +++--- .../src/app/after-content-parent.component.ts | 9 +-- .../src/app/after-content.component.ts | 4 +- .../src/app/after-view-parent.component.ts | 13 ++-- .../src/app/after-view.component.ts | 4 +- .../src/app/app.component.html | 22 ++++--- .../src/app/child-view.component.ts | 3 +- .../src/app/child.component.ts | 3 +- .../src/app/counter-parent.component.ts | 17 +++-- .../src/app/counter.component.ts | 13 ++-- .../src/app/do-check-parent.component.html | 16 +++-- .../src/app/do-check-parent.component.ts | 3 +- .../src/app/do-check.component.ts | 12 ++-- .../src/app/on-changes-parent.component.html | 20 +++--- .../src/app/on-changes-parent.component.ts | 2 +- .../src/app/on-changes.component.ts | 12 ++-- .../src/app/peek-a-boo-parent.component.ts | 11 ++-- .../src/app/peek-a-boo.component.ts | 3 +- .../src/app/spy.component.html | 19 +++--- .../lifecycle-hooks/src/app/spy.component.ts | 6 +- .../lifecycle-hooks/src/assets/sample.css | 62 ++++++++++++++++--- 21 files changed, 157 insertions(+), 116 deletions(-) diff --git a/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts b/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts index 45422afe34..54b5e4e012 100644 --- a/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts +++ b/aio/content/examples/lifecycle-hooks/e2e/src/app.e2e-spec.ts @@ -86,7 +86,7 @@ describe('Lifecycle hooks', () => { const parentEle = element(by.tagName('after-view-parent')); const buttonEle = parentEle.element(by.tagName('button')); // Reset const commentEle = parentEle.element(by.className('comment')); - const logEles = parentEle.all(by.css('h4 ~ div')); + const logEles = parentEle.all(by.css('h3 ~ div')); const childViewInputEle = parentEle.element(by.css('app-child-view input')); let logCount: number; @@ -113,7 +113,7 @@ describe('Lifecycle hooks', () => { const parentEle = element(by.tagName('after-content-parent')); const buttonEle = parentEle.element(by.tagName('button')); // Reset const commentEle = parentEle.element(by.className('comment')); - const logEles = parentEle.all(by.css('h4 ~ div')); + const logEles = parentEle.all(by.css('h3 ~ div')); const childViewInputEle = parentEle.element(by.css('app-child input')); let logCount = await logEles.count(); @@ -136,8 +136,8 @@ describe('Lifecycle hooks', () => { const inputEle = element(by.css('spy-parent input')); const addHeroButtonEle = element(by.cssContainingText('spy-parent button', 'Add Hero')); const resetHeroesButtonEle = element(by.cssContainingText('spy-parent button', 'Reset Heroes')); - const heroEles = element.all(by.css('spy-parent div[appSpy')); - const logEles = element.all(by.css('spy-parent h4 ~ div')); + const heroEles = element.all(by.css('spy-parent div p')); + const logEles = element.all(by.css('spy-parent h3 ~ div')); expect(await heroEles.count()).toBe(2, 'should have two heroes displayed'); expect(await logEles.count()).toBe(2, 'should have two log entries'); @@ -156,18 +156,19 @@ describe('Lifecycle hooks', () => { it('should support "spy counter"', async () => { const updateCounterButtonEle = element(by.cssContainingText('counter-parent button', 'Update')); const resetCounterButtonEle = element(by.cssContainingText('counter-parent button', 'Reset')); - const textEle = element(by.css('counter-parent app-counter > div')); - const logEles = element.all(by.css('counter-parent h4 ~ div')); + const textEle = element(by.css('counter-parent app-counter p')); + const logEles = element.all(by.css('counter-parent .info .log')); expect(await textEle.getText()).toContain('Counter = 0'); - expect(await logEles.count()).toBe(2, 'should start with two log entries'); + expect(await logEles.count()).toBe(3, 'should start with one change log and two lifecycle log entries, including reset'); await updateCounterButtonEle.click(); expect(await textEle.getText()).toContain('Counter = 1'); - expect(await logEles.count()).toBe(3, 'should now have 3 log entries'); + expect(await logEles.count()).toBe(5, 'should now have 2 change log entries and 3 lifecycle log entries, including reset'); await resetCounterButtonEle.click(); expect(await textEle.getText()).toContain('Counter = 0'); - expect(await logEles.count()).toBe(7, 'should now have 7 log entries - 3 prev + 1 reset + 2 destroy + 1 init'); + expect(await logEles.count()).toBe(8, 'should now have 8 log entries - 1 change log + 2 reset + 2 destroy + 3 init'); + }); }); diff --git a/aio/content/examples/lifecycle-hooks/src/app/after-content-parent.component.ts b/aio/content/examples/lifecycle-hooks/src/app/after-content-parent.component.ts index 18c055c824..dcfe5bacd1 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/after-content-parent.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/after-content-parent.component.ts @@ -16,12 +16,13 @@ import { LoggerService } from './logger.service'; // #enddocregion parent-template + ` -

-- AfterContent Logs --

-

-
{{msg}}
+
+

AfterContent Logs

+ +
{{msg}}
+
`, - styles: ['.parent {background: burlywood}'], providers: [LoggerService] }) export class AfterContentParentComponent { diff --git a/aio/content/examples/lifecycle-hooks/src/app/after-content.component.ts b/aio/content/examples/lifecycle-hooks/src/app/after-content.component.ts index 6e25e24a52..9dfa1a7058 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/after-content.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/after-content.component.ts @@ -9,9 +9,9 @@ import { LoggerService } from './logger.service'; selector: 'after-content', // #docregion template template: ` -
-- projected content begins --
+
projected content begins
-
-- projected content ends --
` +
projected content ends
` // #enddocregion template + `

diff --git a/aio/content/examples/lifecycle-hooks/src/app/after-view-parent.component.ts b/aio/content/examples/lifecycle-hooks/src/app/after-view-parent.component.ts index 20158287e3..04066ff7e6 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/after-view-parent.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/after-view-parent.component.ts @@ -5,17 +5,16 @@ import { LoggerService } from './logger.service'; @Component({ selector: 'after-view-parent', template: ` -

-

AfterView

+

AfterView

- + -

-- AfterView Logs --

-

-
{{msg}}
+
+

AfterView Logs

+ +
{{msg}}
`, - styles: ['.parent {background: burlywood}'], providers: [LoggerService] }) export class AfterViewParentComponent { diff --git a/aio/content/examples/lifecycle-hooks/src/app/after-view.component.ts b/aio/content/examples/lifecycle-hooks/src/app/after-view.component.ts index 7c25a513b5..7a1121776a 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/after-view.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/after-view.component.ts @@ -9,9 +9,9 @@ import { LoggerService } from './logger.service'; selector: 'after-view', // #docregion template template: ` -
-- child view begins --
+
child view begins
-
-- child view ends --
` +
child view ends
` // #enddocregion template + `

diff --git a/aio/content/examples/lifecycle-hooks/src/app/app.component.html b/aio/content/examples/lifecycle-hooks/src/app/app.component.html index 0dc9abbbec..93309da4fd 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/app.component.html +++ b/aio/content/examples/lifecycle-hooks/src/app/app.component.html @@ -1,36 +1,42 @@ -

Component Lifecycle Hooks

-Peek-a-boo: (most) lifecycle hooks
-Spy: directive with OnInit & OnDestroy
-OnChanges
-DoCheck
-AfterViewInit & AfterViewChecked
-AfterContentInit & AfterContentChecked
-Counter: OnChanges + Spy directive
+

Lifecycle Hooks

+Peek-a-boo: (most) lifecycle hooks +Spy: directive with OnInit & OnDestroy +OnChanges +DoCheck +AfterViewInit & AfterViewChecked +AfterContentInit & AfterContentChecked +Counter: OnChanges + Spy directive back to top +
back to top +
back to top +
back to top +
back to top +
back to top +
diff --git a/aio/content/examples/lifecycle-hooks/src/app/child-view.component.ts b/aio/content/examples/lifecycle-hooks/src/app/child-view.component.ts index 80664a9a09..5dbc1bf6c9 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/child-view.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/child-view.component.ts @@ -3,7 +3,8 @@ import { Component } from '@angular/core'; // #docregion child-view @Component({ selector: 'app-child-view', - template: '' + template: ` + ` }) export class ChildViewComponent { hero = 'Magneta'; diff --git a/aio/content/examples/lifecycle-hooks/src/app/child.component.ts b/aio/content/examples/lifecycle-hooks/src/app/child.component.ts index d990c1c476..a63fa95c5d 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/child.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/child.component.ts @@ -2,7 +2,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-child', - template: '' + template: ` + ` }) export class ChildComponent { hero = 'Magneta'; diff --git a/aio/content/examples/lifecycle-hooks/src/app/counter-parent.component.ts b/aio/content/examples/lifecycle-hooks/src/app/counter-parent.component.ts index 651ac5a34f..238eb384fc 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/counter-parent.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/counter-parent.component.ts @@ -5,19 +5,18 @@ import { LoggerService } from './logger.service'; @Component({ selector: 'counter-parent', template: ` -
-

Counter Spy

+

Counter Spy

- - + + - + -

-- Spy Lifecycle Hook Log --

-
{{msg}}
+
+

Spy Lifecycle Hook Log

+
{{msg}}
`, - styles: ['.parent {background: gold;}'], providers: [LoggerService] }) export class CounterParentComponent { @@ -38,7 +37,7 @@ export class CounterParentComponent { } reset() { - this.logger.log('-- reset --'); + this.logger.log('reset'); this.value = 0; this.logger.tick(); } diff --git a/aio/content/examples/lifecycle-hooks/src/app/counter.component.ts b/aio/content/examples/lifecycle-hooks/src/app/counter.component.ts index 192cc06f7e..acbbc39056 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/counter.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/counter.component.ts @@ -7,14 +7,13 @@ import { @Component({ selector: 'app-counter', template: ` -
- Counter = {{counter}} +

Counter = {{counter}}

-
-- Counter Change Log --
-
{{chg}}
-
- `, - styles: ['.counter {background: LightYellow; padding: 8px; margin-top: 8px}'] +
+

Counter Change Log

+
{{chg}}
+
+ ` }) export class MyCounterComponent implements OnChanges { @Input() counter: number; diff --git a/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html b/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html index 42d8914977..c29c6fb7a7 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html +++ b/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html @@ -1,11 +1,9 @@ -
-

{{title}}

+

{{title}}

+
diff --git a/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.ts b/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.ts index 9ac6a3b88a..09c572fbfe 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.ts @@ -5,8 +5,7 @@ import { Hero } from './hero'; @Component({ selector: 'do-check-parent', - templateUrl: './do-check-parent.component.html', - styles: ['.parent {background: Lavender}'] + templateUrl: './do-check-parent.component.html' }) export class DoCheckParentComponent { hero: Hero; diff --git a/aio/content/examples/lifecycle-hooks/src/app/do-check.component.ts b/aio/content/examples/lifecycle-hooks/src/app/do-check.component.ts index 33b006d907..e5fddb063e 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/do-check.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/do-check.component.ts @@ -7,17 +7,13 @@ import { Hero } from './hero'; @Component({ selector: 'do-check', template: ` -
+

{{hero.name}} can {{power}}

-

-- Change Log --

-
{{chg}}
+

Change Log

+
{{chg}}
- `, - styles: [ - '.hero {background: LightYellow; padding: 8px; margin-top: 8px}', - 'p {background: Yellow; padding: 8px; margin-top: 8px}' - ] + ` }) export class DoCheckComponent implements DoCheck { @Input() hero: Hero; diff --git a/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.html b/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.html index a0fd404931..ca111df343 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.html +++ b/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.html @@ -1,13 +1,11 @@ -
-

{{title}}

+

{{title}}

+ + + + - - - -
Power:
Hero.name:
-

+ - - - -
+ + + diff --git a/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.ts b/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.ts index fa47c6d935..8ed68f8f92 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/on-changes-parent.component.ts @@ -6,7 +6,7 @@ import { OnChangesComponent } from './on-changes.component'; @Component({ selector: 'on-changes-parent', templateUrl: './on-changes-parent.component.html', - styles: ['.parent {background: Lavender;}'] + styles: [''] }) export class OnChangesParentComponent { hero: Hero; diff --git a/aio/content/examples/lifecycle-hooks/src/app/on-changes.component.ts b/aio/content/examples/lifecycle-hooks/src/app/on-changes.component.ts index 78e601c5a4..132d5bbcf3 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/on-changes.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/on-changes.component.ts @@ -7,17 +7,13 @@ import { Hero } from './hero'; @Component({ selector: 'on-changes', template: ` -
+

{{hero.name}} can {{power}}

-

-- Change Log --

-
{{chg}}
+

Change Log

+
{{chg}}
- `, - styles: [ - '.hero {background: LightYellow; padding: 8px; margin-top: 8px}', - 'p {background: Yellow; padding: 8px; margin-top: 8px}' - ] + ` }) export class OnChangesComponent implements OnChanges { // #docregion inputs diff --git a/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo-parent.component.ts b/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo-parent.component.ts index 7edb57bfc3..a6f2f93ca7 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo-parent.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo-parent.component.ts @@ -6,6 +6,7 @@ import { LoggerService } from './logger.service'; @Component({ selector: 'peek-a-boo-parent', template: ` +

Peek-A-Boo

@@ -14,14 +15,14 @@ import { LoggerService } from './logger.service'; - - +
+ -

-- Lifecycle Hook Log --

-
{{msg}}
+

Lifecycle Hook Log

+
{{msg}}
+
`, - styles: ['.parent {background: moccasin}'], providers: [ LoggerService ] }) export class PeekABooParentComponent { diff --git a/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo.component.ts b/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo.component.ts index 54df001f83..693afd5e1c 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/peek-a-boo.component.ts @@ -19,8 +19,7 @@ import { PeekABooDirective } from './peek-a-boo.directive'; @Component({ selector: 'peek-a-boo', - template: '

Now you see my hero, {{name}}

', - styles: ['p {background: LightYellow; padding: 8px}'] + template: '

Now you see my hero, {{name}}

' }) // Don't HAVE to mention the Lifecycle Hook interfaces // unless we want typing and tool support. diff --git a/aio/content/examples/lifecycle-hooks/src/app/spy.component.html b/aio/content/examples/lifecycle-hooks/src/app/spy.component.html index 96ca78194a..e371cc3bf6 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/spy.component.html +++ b/aio/content/examples/lifecycle-hooks/src/app/spy.component.html @@ -1,16 +1,19 @@

Spy Directive

- + + -

- -
- {{hero}} +
+ +

+ {{hero}} +

+ + +

Spy Lifecycle Hook Log

+
{{msg}}
- -

-- Spy Lifecycle Hook Log --

-
{{msg}}
diff --git a/aio/content/examples/lifecycle-hooks/src/app/spy.component.ts b/aio/content/examples/lifecycle-hooks/src/app/spy.component.ts index 852788ffec..a8f82d4abf 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/spy.component.ts +++ b/aio/content/examples/lifecycle-hooks/src/app/spy.component.ts @@ -6,10 +6,6 @@ import { LoggerService } from './logger.service'; @Component({ selector: 'spy-parent', templateUrl: './spy.component.html', - styles: [ - '.parent {background: khaki;}', - '.heroes {background: LightYellow; padding: 0 8px}' - ], providers: [LoggerService] }) export class SpyParentComponent { @@ -31,7 +27,7 @@ export class SpyParentComponent { this.logger.tick(); } reset() { - this.logger.log('-- reset --'); + this.logger.log('reset'); this.heroes = []; this.logger.tick(); } diff --git a/aio/content/examples/lifecycle-hooks/src/assets/sample.css b/aio/content/examples/lifecycle-hooks/src/assets/sample.css index df17c897c6..498464f91f 100644 --- a/aio/content/examples/lifecycle-hooks/src/assets/sample.css +++ b/aio/content/examples/lifecycle-hooks/src/assets/sample.css @@ -1,13 +1,61 @@ .parent { - color: #666; - margin: 14px 0; - padding: 8px; + padding: 2rem 0; } -input { - margin: 4px; - padding: 4px; + +h2 { + text-align: center; } + .comment { - color: red; + color: #890000; font-style: italic; } + +.log { + background-color: #e4e4e4; + padding: .25rem; +} + +.info { + background: #fff4f4; + padding: .75rem; + margin-top: 1rem; +} + +p { + padding: .25rem; +} + +a { + display: block; + padding-bottom: .5rem; + font-size: 1.1rem; + color: #264d73 +} + +a:hover { + text-decoration: none; +} + +a[href="#top"] { + margin: 1rem 0; + padding: .5rem; + background-color: #264d73; + color: #fff; +} + +a[href="#top"]:hover { + background-color:#eaeaea; + color: black; +} + +a[href="#top"]:active { + background-color: black; + color: #eaeaea; +} + +input { + margin-bottom: 1rem; + margin-top: .5rem; + font-size: 1rem; +}