docs(renderer): remove renderer (#2925)
This commit is contained in:
		
							parent
							
								
									93c78dae10
								
							
						
					
					
						commit
						4a536732bc
					
				| @ -1,10 +1,10 @@ | ||||
| /* tslint:disable:no-unused-variable */ | ||||
| // #docregion
 | ||||
| import { Directive, ElementRef, Input, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef, Input } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ selector: '[myHighlight]' }) | ||||
| export class HighlightDirective { | ||||
|     constructor(el: ElementRef, renderer: Renderer) { | ||||
|        renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow'); | ||||
|     constructor(el: ElementRef) { | ||||
|        el.nativeElement.style.backgroundColor = 'yellow'; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| /* tslint:disable:no-unused-variable */ | ||||
| // #docregion
 | ||||
| import { Directive, ElementRef, HostListener, Input, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef, HostListener, Input } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ | ||||
|   selector: '[myHighlight]' | ||||
| @ -8,7 +8,7 @@ import { Directive, ElementRef, HostListener, Input, Renderer } from '@angular/c | ||||
| 
 | ||||
| export class HighlightDirective { | ||||
|   // #docregion ctor
 | ||||
|   constructor(private el: ElementRef, private renderer: Renderer) { } | ||||
|   constructor(private el: ElementRef) { } | ||||
|   // #enddocregion ctor
 | ||||
| 
 | ||||
|   // #docregion mouse-methods, host
 | ||||
| @ -26,7 +26,7 @@ export class HighlightDirective { | ||||
|   // #enddocregion host
 | ||||
| 
 | ||||
|   private highlight(color: string) { | ||||
|     this.renderer.setElementStyle(this.el.nativeElement, 'backgroundColor', color); | ||||
|     this.el.nativeElement.style.backgroundColor = 'yellow'; | ||||
|   } | ||||
|   // #enddocregion mouse-methods
 | ||||
| 
 | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| /* tslint:disable:member-ordering */ | ||||
| // #docplaster
 | ||||
| // #docregion full
 | ||||
| import { Directive, ElementRef, HostListener, Input, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef, HostListener, Input } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ | ||||
|   selector: '[myHighlight]' | ||||
| @ -9,7 +10,7 @@ import { Directive, ElementRef, HostListener, Input, Renderer } from '@angular/c | ||||
| export class HighlightDirective { | ||||
|   private _defaultColor = 'red'; | ||||
| 
 | ||||
|   constructor(private el: ElementRef, private renderer: Renderer) { } | ||||
|   constructor(private el: ElementRef) { } | ||||
|   // #enddocregion class
 | ||||
| 
 | ||||
|   // #docregion defaultColor
 | ||||
| @ -33,7 +34,7 @@ export class HighlightDirective { | ||||
|   } | ||||
| 
 | ||||
|   private highlight(color: string) { | ||||
|     this.renderer.setElementStyle(this.el.nativeElement, 'backgroundColor', color); | ||||
|     this.el.nativeElement.style.backgroundColor = color; | ||||
|   } | ||||
| } | ||||
| // #enddocregion class
 | ||||
|  | ||||
| @ -5,13 +5,13 @@ | ||||
| // and it highlights in blue instead of gold
 | ||||
| 
 | ||||
| // #docregion
 | ||||
| import { Directive, ElementRef, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ selector: '[highlight], input' }) | ||||
| /** Highlight the attached element or an InputElement in blue */ | ||||
| export class HighlightDirective { | ||||
|   constructor(renderer: Renderer, el: ElementRef) { | ||||
|     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'powderblue'); | ||||
|   constructor(el: ElementRef) { | ||||
|     el.nativeElement.style.backgroundColor = 'powderblue'; | ||||
|     console.log( | ||||
|       `* Contact highlight called for ${el.nativeElement.tagName}`); | ||||
|   } | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| // #docregion
 | ||||
| import { Directive, ElementRef, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef } from '@angular/core'; | ||||
| 
 | ||||
| // Same directive name and selector as
 | ||||
| // HighlightDirective in parent AppRootModule
 | ||||
| @ -7,8 +7,8 @@ import { Directive, ElementRef, Renderer } from '@angular/core'; | ||||
| // and it highlights in beige instead of yellow
 | ||||
| @Directive({ selector: '[highlight]' }) | ||||
| export class HighlightDirective { | ||||
|     constructor(renderer: Renderer, el: ElementRef) { | ||||
|     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'beige'); | ||||
|     constructor(el: ElementRef) { | ||||
|        el.nativeElement.style.backgroundColor = 'beige'; | ||||
|        console.log(`* Hero highlight called for ${el.nativeElement.tagName}`); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,11 +1,11 @@ | ||||
| // #docregion
 | ||||
| import { Directive, ElementRef, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ selector: '[highlight]' }) | ||||
| /** Highlight the attached element in gold */ | ||||
| export class HighlightDirective { | ||||
|   constructor(renderer: Renderer, el: ElementRef) { | ||||
|     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'gold'); | ||||
|   constructor(el: ElementRef) { | ||||
|     el.nativeElement.style.backgroundColor = 'gold'; | ||||
|     console.log( | ||||
|       `* AppRoot highlight called for ${el.nativeElement.tagName}`); | ||||
|   } | ||||
|  | ||||
| @ -1,12 +1,12 @@ | ||||
| /* tslint:disable */ | ||||
| // Exact copy of contact/highlight.directive except for color and message
 | ||||
| import { Directive, ElementRef, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ selector: '[highlight], input' }) | ||||
| /** Highlight the attached element or an InputElement in gray */ | ||||
| export class HighlightDirective { | ||||
|   constructor(renderer: Renderer, el: ElementRef) { | ||||
|     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'lightgray'); | ||||
|   constructor(el: ElementRef) { | ||||
|     el.nativeElement.style.backgroundColor = 'lightgray'; | ||||
|     console.log( | ||||
|       `* Shared highlight called for ${el.nativeElement.tagName}`); | ||||
|   } | ||||
|  | ||||
| @ -1,10 +1,10 @@ | ||||
| // #docregion
 | ||||
| import { Directive, ElementRef, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ selector: 'input'}) | ||||
| /** Highlight the attached input text element in blue */ | ||||
| export class InputHighlightDirective { | ||||
|   constructor(renderer: Renderer, el: ElementRef) { | ||||
|     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'powderblue'); | ||||
|   constructor(el: ElementRef) { | ||||
|     el.nativeElement.style.backgroundColor = 'powderblue'; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -20,7 +20,8 @@ describe('AboutComponent (highlightDirective)', () => { | ||||
| 
 | ||||
|   it('should have skyblue <h2>', () => { | ||||
|     const de = fixture.debugElement.query(By.css('h2')); | ||||
|     expect(de.styles['backgroundColor']).toBe('skyblue'); | ||||
|     const bgColor = de.nativeElement.style.backgroundColor; | ||||
|     expect(bgColor).toBe('skyblue'); | ||||
|   }); | ||||
|   // #enddocregion tests
 | ||||
| }); | ||||
|  | ||||
| @ -332,8 +332,8 @@ describe('TestBed Component Tests', () => { | ||||
|     expect(inputEl.listeners.length).toBeGreaterThan(2, 'several listeners attached'); | ||||
|   }); | ||||
| 
 | ||||
|   // #docregion debug-dom-renderer
 | ||||
|   it('DebugDomRender should set attributes, styles, classes, and properties', () => { | ||||
|   // #docregion dom-attributes
 | ||||
|   it('BankAccountComponent should set attributes, styles, classes, and properties', () => { | ||||
|     const fixture = TestBed.createComponent(BankAccountParentComponent); | ||||
|     fixture.detectChanges(); | ||||
|     const comp = fixture.componentInstance; | ||||
| @ -351,12 +351,18 @@ describe('TestBed Component Tests', () => { | ||||
|     expect(el.classes['closed']).toBe(true, 'closed class'); | ||||
|     expect(el.classes['open']).toBe(false, 'open class'); | ||||
| 
 | ||||
|     expect(el.properties['customProperty']).toBe(true, 'customProperty'); | ||||
| 
 | ||||
|     expect(el.styles['color']).toBe(comp.color, 'color style'); | ||||
|     expect(el.styles['width']).toBe(comp.width + 'px', 'width style'); | ||||
|   // #enddocregion dom-attributes
 | ||||
| 
 | ||||
|     // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future?
 | ||||
|     // expect(el.properties['customProperty']).toBe(true, 'customProperty');
 | ||||
| 
 | ||||
|   // #docregion dom-attributes
 | ||||
|   }); | ||||
|   // #enddocregion debug-dom-renderer
 | ||||
|   // #enddocregion dom-attributes
 | ||||
| 
 | ||||
| 
 | ||||
| }); | ||||
| 
 | ||||
| describe('TestBed Component Overrides:', () => { | ||||
|  | ||||
| @ -1,10 +1,10 @@ | ||||
| /* tslint:disable:forin */ | ||||
| import { Component, ContentChildren, Directive, ElementRef, EventEmitter, | ||||
| import { Component, ContentChildren, Directive, EventEmitter, | ||||
|          Injectable, Input, Output, Optional, | ||||
|          HostBinding, HostListener, | ||||
|          OnInit, OnChanges, OnDestroy, | ||||
|          Pipe, PipeTransform, | ||||
|          Renderer, SimpleChange } from '@angular/core'; | ||||
|          SimpleChange } from '@angular/core'; | ||||
| 
 | ||||
| import { Observable } from 'rxjs/Observable'; | ||||
| import 'rxjs/add/observable/of'; | ||||
| @ -76,9 +76,10 @@ export class BankAccountComponent { | ||||
|   @Input() bank: string; | ||||
|   @Input('account') id: string; | ||||
| 
 | ||||
|   constructor(private renderer: Renderer, private el: ElementRef ) { | ||||
|     renderer.setElementProperty(el.nativeElement, 'customProperty', true); | ||||
|   } | ||||
|   // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future?
 | ||||
|   // constructor(private renderer: Renderer, private el: ElementRef ) {
 | ||||
|   //   renderer.setElementProperty(el.nativeElement, 'customProperty', true);
 | ||||
|   // }
 | ||||
| } | ||||
| 
 | ||||
| /** A component with attributes, styles, classes, and property setting */ | ||||
|  | ||||
| @ -44,12 +44,14 @@ describe('HighlightDirective', () => { | ||||
|   }); | ||||
| 
 | ||||
|   it('should color 1st <h2> background "yellow"', () => { | ||||
|     expect(des[0].styles['backgroundColor']).toBe('yellow'); | ||||
|     const bgColor = des[0].nativeElement.style.backgroundColor; | ||||
|     expect(bgColor).toBe('yellow'); | ||||
|   }); | ||||
| 
 | ||||
|   it('should color 2nd <h2> background w/ default color', () => { | ||||
|     const dir = des[1].injector.get(HighlightDirective) as HighlightDirective; | ||||
|     expect(des[1].styles['backgroundColor']).toBe(dir.defaultColor); | ||||
|     const bgColor = des[1].nativeElement.style.backgroundColor; | ||||
|     expect(bgColor).toBe(dir.defaultColor); | ||||
|   }); | ||||
| 
 | ||||
|   it('should bind <input> background to value color', () => { | ||||
| @ -65,17 +67,19 @@ describe('HighlightDirective', () => { | ||||
|     expect(input.style.backgroundColor).toBe('green', 'changed backgroundColor'); | ||||
|   }); | ||||
| 
 | ||||
|   // customProperty tests
 | ||||
|   it('all highlighted elements should have a true customProperty', () => { | ||||
|     const allTrue = des.map(de => !!de.properties['customProperty']).every(v => v === true); | ||||
|     expect(allTrue).toBe(true); | ||||
|   }); | ||||
| 
 | ||||
|   it('bare <h2> should not have a customProperty', () => { | ||||
|     expect(bareH2.properties['customProperty']).toBeUndefined(); | ||||
|   }); | ||||
|   // #enddocregion selected-tests
 | ||||
| 
 | ||||
|   // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future?
 | ||||
|   // // customProperty tests
 | ||||
|   // it('all highlighted elements should have a true customProperty', () => {
 | ||||
|   //   const allTrue = des.map(de => !!de.properties['customProperty']).every(v => v === true);
 | ||||
|   //   expect(allTrue).toBe(true);
 | ||||
|   // });
 | ||||
| 
 | ||||
|   // injected directive
 | ||||
|   // attached HighlightDirective can be injected
 | ||||
|   it('can inject `HighlightDirective` in 1st <h2>', () => { | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| // #docregion
 | ||||
| import { Directive, ElementRef, Input, OnChanges, Renderer } from '@angular/core'; | ||||
| import { Directive, ElementRef, Input, OnChanges } from '@angular/core'; | ||||
| 
 | ||||
| @Directive({ selector: '[highlight]' }) | ||||
| /** Set backgroundColor for the attached element to highlight color | ||||
| @ -10,13 +10,11 @@ export class HighlightDirective implements OnChanges { | ||||
| 
 | ||||
|   @Input('highlight') bgColor: string; | ||||
| 
 | ||||
|   constructor(private renderer: Renderer, private el: ElementRef) { | ||||
|     renderer.setElementProperty(el.nativeElement, 'customProperty', true); | ||||
|   constructor(private el: ElementRef) { | ||||
|     el.nativeElement.style.customProperty = true; | ||||
|   } | ||||
| 
 | ||||
|   ngOnChanges() { | ||||
|     this.renderer.setElementStyle( | ||||
|       this.el.nativeElement, 'backgroundColor', | ||||
|       this.bgColor || this.defaultColor ); | ||||
|     this.el.nativeElement.style.backgroundColor = this.bgColor || this.defaultColor; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -78,7 +78,6 @@ block highlight-directive-1 | ||||
|     1. `ElementRef` [injects](dependency-injection.html) into the directive's constructor | ||||
|     so the code can access the DOM element. | ||||
|     1. `Input` allows data to flow from the binding expression into the directive. | ||||
|     1. `Renderer` allows the code to change the DOM element's style. | ||||
| 
 | ||||
|     Next, the `@Directive` decorator function contains the directive metadata in a configuration object | ||||
|     as an argument. | ||||
| @ -107,10 +106,10 @@ p | ||||
|     |  Exporting #[code HighlightDirective] makes it accessible to other components. | ||||
| :marked | ||||
|   Angular creates a new instance of the directive's controller class for | ||||
|   each matching element, injecting an Angular `ElementRef` and `Renderer` | ||||
|   each matching element, injecting an Angular `ElementRef` | ||||
|   into the constructor. | ||||
|   `ElementRef` is a service that grants direct access to the DOM element | ||||
|   through its `nativeElement` property and `Renderer` allows the code to set the element style. | ||||
|   through its `nativeElement` property. | ||||
| 
 | ||||
| .l-main-section | ||||
| a#apply-directive | ||||
|  | ||||
| @ -1578,13 +1578,16 @@ figure.image-display | ||||
|   in `By.css('h2:not([highlight])')` helps find `<h2>` elements that _do not_ have the directive. | ||||
|   `By.css('*:not([highlight])')` finds _any_ element that does not have the directive. | ||||
| 
 | ||||
| // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future? | ||||
|   * `DebugElement.styles` affords access to element styles even in the absence of a real browser, thanks to the `DebugElement` abstraction. | ||||
|   But feel free to exploit the `nativeElement` when that seems easier or more clear than the abstraction. | ||||
| 
 | ||||
| :marked | ||||
|   * Angular adds a directive to the injector of the element to which it is applied.  | ||||
|   The test for the default color uses the injector of the 2nd `<h2>` to get its `HighlightDirective` instance | ||||
|   and its `defaultColor`. | ||||
|    | ||||
| 
 | ||||
| // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future?  | ||||
|   * `DebugElement.properties` affords access to the artificial custom property that is set by the directive. | ||||
| 
 | ||||
| a(href="#top").to-top Back to top | ||||
| @ -1875,8 +1878,7 @@ table | ||||
|       :marked | ||||
|         The testing shims (`karma-test-shim`, `browser-test-shim`)  | ||||
|         establish the [initial test environment](##testbed-initTestEnvironment) and a default testing module. | ||||
|         The default testing module is configured with basic declaratives and some Angular service substitutes (e.g. `DebugDomRender`)  | ||||
|         that every tester needs. | ||||
|         The default testing module is configured with basic declaratives and some Angular service substitutes that every tester needs. | ||||
|          | ||||
|         Call `configureTestingModule` to refine the testing module configuration for a particular set of tests | ||||
|         by adding and removing imports, declarations (of components, directives, and pipes), and providers. | ||||
| @ -2214,49 +2216,50 @@ table | ||||
| 
 | ||||
| +makeExample('testing/ts/app/hero/hero-list.component.spec.ts', 'by', 'app/hero/hero-list.component.spec.ts')(format=".") | ||||
| 
 | ||||
| #renderer-tests | ||||
| :marked | ||||
|   Many custom application directives inject the `Renderer` and call one of its `set...` methods. | ||||
| // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future? | ||||
|   #renderer-tests | ||||
|   :marked | ||||
|     Many custom application directives inject the `Renderer` and call one of its `set...` methods. | ||||
| 
 | ||||
|   The test environment substitutes the `DebugDomRender` for the runtime `Renderer`. | ||||
|   The `DebugDomRender` updates additional dictionary properties of the `DebugElement` | ||||
|   when something calls a `set...` method. | ||||
|   | ||||
|   These dictionary properties are primarily of interest to authors of Angular DOM inspection tools | ||||
|   but they may provide useful insights to testers as well. | ||||
|     The test environment substitutes the `DebugDomRender` for the runtime `Renderer`. | ||||
|     The `DebugDomRender` updates additional dictionary properties of the `DebugElement` | ||||
|     when something calls a `set...` method. | ||||
|    | ||||
|     These dictionary properties are primarily of interest to authors of Angular DOM inspection tools | ||||
|     but they may provide useful insights to testers as well. | ||||
| 
 | ||||
| table | ||||
|   tr | ||||
|     th Dictionary | ||||
|     th Description | ||||
|   tr | ||||
|     td(style="vertical-align: top") <code>properties</code> | ||||
|     td | ||||
|       :marked | ||||
|         Updated by `Renderer.setElementProperty`. | ||||
|         Many Angular directives call it, including `NgModel`. | ||||
|   tr | ||||
|     td(style="vertical-align: top") <code>attributes</code> | ||||
|     td | ||||
|       :marked | ||||
|         Updated by `Renderer.setElementAttribute`. | ||||
|         Angular `[attribute]` bindings call it. | ||||
|   tr | ||||
|     td(style="vertical-align: top") <code>classes</code> | ||||
|     td | ||||
|       :marked | ||||
|         Updated by `Renderer.setElementClass`. | ||||
|         Angular `[class]` bindings call it. | ||||
|   tr | ||||
|     td(style="vertical-align: top") <code>styles</code> | ||||
|     td | ||||
|       :marked | ||||
|         Updated by `Renderer.setElementStyle`. | ||||
|         Angular `[style]` bindings call it. | ||||
| :marked | ||||
|   Here's an example of `Renderer` tests from the <live-example plnkr="bag-specs">live "Specs Bag" sample</live-example>. | ||||
|   table | ||||
|     tr | ||||
|       th Dictionary | ||||
|       th Description | ||||
|     tr | ||||
|       td(style="vertical-align: top") <code>properties</code> | ||||
|       td | ||||
|         :marked | ||||
|           Updated by `Renderer.setElementProperty`. | ||||
|           Many Angular directives call it, including `NgModel`. | ||||
|     tr | ||||
|       td(style="vertical-align: top") <code>attributes</code> | ||||
|       td | ||||
|         :marked | ||||
|           Updated by `Renderer.setElementAttribute`. | ||||
|           Angular `[attribute]` bindings call it. | ||||
|     tr | ||||
|       td(style="vertical-align: top") <code>classes</code> | ||||
|       td | ||||
|         :marked | ||||
|           Updated by `Renderer.setElementClass`. | ||||
|           Angular `[class]` bindings call it. | ||||
|     tr | ||||
|       td(style="vertical-align: top") <code>styles</code> | ||||
|       td | ||||
|         :marked | ||||
|           Updated by `Renderer.setElementStyle`. | ||||
|           Angular `[style]` bindings call it. | ||||
|   :marked | ||||
|     Here's an example of `Renderer` tests from the <live-example plnkr="bag-specs">live "Specs Bag" sample</live-example>. | ||||
| 
 | ||||
| +makeExample('testing/ts/app/bag/bag.spec.ts', 'debug-dom-renderer')(format=".") | ||||
|   +makeExample('testing/ts/app/bag/bag.spec.ts', 'dom-attributes')(format=".") | ||||
| 
 | ||||
| a(href="#top").to-top Back to top | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user