Prior to this commit, a lot of internal-only class properties and methods (such as `ngOnChanges`) of the Forms package directives were exposed on angular.io website. These fields are not expected to be called externally (they are used/invoked by framework only), since they are part of internal implementations of the following interfaces: * Angular lifecycle hook interfaces * ControlValueAccessor interface * Validator interface Having these internal-only fields in docs creates unnecessary noise on directive detail pages. This commit adds the `@nodoc` annotation to these properties and methods to keep fields in the golden files, but hide them in docs. PR Close #38583
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google LLC All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| 
 | |
| import {Directive, ElementRef, forwardRef, Renderer2, StaticProvider} from '@angular/core';
 | |
| 
 | |
| import {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';
 | |
| 
 | |
| export const RANGE_VALUE_ACCESSOR: StaticProvider = {
 | |
|   provide: NG_VALUE_ACCESSOR,
 | |
|   useExisting: forwardRef(() => RangeValueAccessor),
 | |
|   multi: true
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * @description
 | |
|  * The `ControlValueAccessor` for writing a range value and listening to range input changes.
 | |
|  * The value accessor is used by the `FormControlDirective`, `FormControlName`, and  `NgModel`
 | |
|  * directives.
 | |
|  *
 | |
|  * @usageNotes
 | |
|  *
 | |
|  * ### Using a range input with a reactive form
 | |
|  *
 | |
|  * The following example shows how to use a range input with a reactive form.
 | |
|  *
 | |
|  * ```ts
 | |
|  * const ageControl = new FormControl();
 | |
|  * ```
 | |
|  *
 | |
|  * ```
 | |
|  * <input type="range" [formControl]="ageControl">
 | |
|  * ```
 | |
|  *
 | |
|  * @ngModule ReactiveFormsModule
 | |
|  * @ngModule FormsModule
 | |
|  * @publicApi
 | |
|  */
 | |
| @Directive({
 | |
|   selector:
 | |
|       'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',
 | |
|   host: {
 | |
|     '(change)': 'onChange($event.target.value)',
 | |
|     '(input)': 'onChange($event.target.value)',
 | |
|     '(blur)': 'onTouched()'
 | |
|   },
 | |
|   providers: [RANGE_VALUE_ACCESSOR]
 | |
| })
 | |
| export class RangeValueAccessor implements ControlValueAccessor {
 | |
|   /**
 | |
|    * The registered callback function called when a change or input event occurs on the input
 | |
|    * element.
 | |
|    * @nodoc
 | |
|    */
 | |
|   onChange = (_: any) => {};
 | |
| 
 | |
|   /**
 | |
|    * The registered callback function called when a blur event occurs on the input element.
 | |
|    * @nodoc
 | |
|    */
 | |
|   onTouched = () => {};
 | |
| 
 | |
|   constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}
 | |
| 
 | |
|   /**
 | |
|    * Sets the "value" property on the input element.
 | |
|    * @nodoc
 | |
|    */
 | |
|   writeValue(value: any): void {
 | |
|     this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Registers a function called when the control value changes.
 | |
|    * @nodoc
 | |
|    */
 | |
|   registerOnChange(fn: (_: number|null) => void): void {
 | |
|     this.onChange = (value) => {
 | |
|       fn(value == '' ? null : parseFloat(value));
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Registers a function called when the control is touched.
 | |
|    * @nodoc
 | |
|    */
 | |
|   registerOnTouched(fn: () => void): void {
 | |
|     this.onTouched = fn;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Sets the "disabled" property on the range input element.
 | |
|    * @nodoc
 | |
|    */
 | |
|   setDisabledState(isDisabled: boolean): void {
 | |
|     this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
 | |
|   }
 | |
| }
 |