Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. @Component({
  2. selector: 'my-checkbox',
  3. templateUrl: './my-checkbox.component.html',
  4. styleUrls: ['./my-checkbox.component.less'],
  5. providers: [
  6. {
  7. provide: NG_VALUE_ACCESSOR,
  8. useExisting: forwardRef(() => MyCheckboxComponent),
  9. multi: true
  10. }
  11. ]
  12. })
  13. export class MyCheckboxComponent implements OnInit, ControlValueAccessor {
  14. @Input() formControlName: string;
  15. @Input() checked: boolean = false;
  16. @Input() indeterminate: boolean = false;
  17. @Input() disabled: boolean = false;
  18. public control: AbstractControl;
  19.  
  20. private innerValue: any = '';
  21. private controlContainer: ControlContainer;
  22.  
  23. private onTouchedCallback: () => void = noop;
  24. private onChangeCallback: (_: any) => void = noop;
  25.  
  26. constructor(
  27. @Optional()
  28. @Host()
  29. @SkipSelf()
  30. private _controlContainer: ControlContainer
  31. ) {
  32. this.controlContainer = _controlContainer;
  33. }
  34.  
  35. ngOnInit() {
  36. this._getFormControl();
  37. }
  38.  
  39. private _getFormControl() {
  40. if (this.controlContainer) {
  41. if (this.formControlName) {
  42. this.control = this.controlContainer.control.get(this.formControlName);
  43. }
  44. }
  45. }
  46.  
  47. get value(): any {
  48. return this.innerValue;
  49. }
  50.  
  51. set value(v: any) {
  52. if (v !== this.innerValue) {
  53. this.indeterminate = false;
  54. this.innerValue = v;
  55. this.onChangeCallback(v);
  56. }
  57. }
  58.  
  59. onBlur() {
  60. this.onTouchedCallback();
  61. }
  62.  
  63. writeValue(value: any) {
  64. if (value !== this.innerValue) {
  65. this.innerValue = value;
  66. }
  67. }
  68.  
  69. registerOnChange(fn: any) {
  70. this.onChangeCallback = fn;
  71. }
  72.  
  73. registerOnTouched(fn: any) {
  74. this.onTouchedCallback = fn;
  75. }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement