19 December 2017

ControlValueAccessor TwoWay Binding trong Angular 2+

 ControlValueAccessor TwoWay Binding

interface ControlValueAccessor {
  writeValue(obj: any): void;
  registerOnChange(fn: any): void;
  registerOnTouched(fn: any): void;
  setDisabledState?(isDisabled: boolean): void;
}

Step 1

import {
  ControlValueAccessor,
  NG_VALUE_ACCESSOR
} from '@angular/forms';

Step 2

export const MY_APP_VALUE_ACCESSOR: any = {
  provide: NG_VALUE_ACCESSOR,
  useExisting: forwardRef(() => AppComponent),
  multi: true
};

Step 3

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [MY_APP_VALUE_ACCESSOR]
})
export class AppComponent implements ControlValueAccessor {
}

Step 4

export class AppComponent implements ControlValueAccessor {

  value: string;
  @Input() disable: boolean;

  onModelChange: Function = () => { };
  onModelTouched: Function = () => { };

  writeValue(obj: any): void { this.value = obj; }
  registerOnChange(fn: any): void { this.onModelChange = fn; }
  registerOnTouched(fn: any): void { this.onModelTouched = fn; }
  setDisabledState?(val: boolean): void { this.disable = val; }

}

Read

writeValue(obj: any): void { 
    this.value = obj; 
}

Write

onClick(event: Event): void {
    this.onModelChange(this.value);
}

ng-touched ng-untouched

onBlur(value: any): void {
    this.onModelTouched();
}

disabled

new FormControl({value:'', disable.true};)

Demo



Related Posts:

  • toPromise() Angular 2 (async await)  #1 Async Short - ToPromise2021 const data = await this.chatManagementService.getBots().toPromise(); console.log(data); #2 Async Function - ToPromise2021async ngOnInit() { await this.getBots(); } /** * Async func… Read More
  • RXJS Call api in nested http - Angular v2 (Mục đích của RXJS trong các ví dụ dưới đây là call api và tiền xử lý data cuối cùng trả giá trị về một lần duy nhất)switchMap + forkJoinGọi api Child loop theo dữ liệu array của api Parent => return 1 object dataRXJ… Read More
  • Custom Modal mở bằng Service Angular 2+Use2020import { Component, OnInit, } from '@angular/core'; import { ApiService } from '../../shared/services/api.service'; import { PushMessageService } from '../../shared/services/push-message.service'; @Component({ s… Read More
  • Renderer2 in Angularimport {Injectable, Renderer2, RendererFactory2} from '@angular/core'; @Component({ selector: 'app-example', templateUrl: './example.component.html', styleUrls: ['./example.component.scss'], }) export class ExampleComp… Read More
  • Angular Google Map with AgmMap - Icon MakerStackblitzhttps://stackblitz.com/edit/angular-google-maps-agm-map<agm-map>https://angular-maps.com/api-docs/agm-core/components/agmmap#source<agm-marker>https://angular-maps.com/api-docs/agm-core/directives/agmmar… Read More

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang