[править: этот код на самом деле работает, поэтому он может служить простым примером того, как реализовать ControlValueAccessor для начинающих]
Я сделал пользовательский компонент, самой простой формы, простой диф, чтоменяет свое внутреннее состояние при нажатии на него
проблема: ngmodel (someValue) обновляется, но функция doLiveChange () никогда не срабатывает
<my-on-off [(ngModel)]="someValue" (ngModelChange)="doLiveChange()" >
</my-on-off>
Я также не уверен, что требуется илине в моем компоненте ... каждый орган делает это по-своему, усложняя примеры, в то время как это должен быть простой интерфейс
@Component({
selector: 'my-on-off',
templateUrl: './onOff.component.html',
styleUrls: ['./onOff.component.css'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => OnOffComponent),
multi: true
}
]
})
export class OnOffComponent implements OnInit,ControlValueAccessor {
onChange;
/* this component implements it's own ngModel lifecycle */
@Input('active') active:number=null; // this is mapped to [(ngModel)] value, see below
constructor() {
}
ngOnInit() {
}
onClick(event)
{
this.active=1-this.active;
this.onChange(this.active);
}
//-------------------------- interface
// when model -> view changes are requested.
writeValue( value : any ) : void {
if(value!=="")
{
this.active=value;
}
else
this.active=null;
}
// callback function that should be called when the control's value changes in the UI
registerOnChange( fn : any ) : void {
this.onChange = fn;
}
setDisabledState( _isDisabled : boolean ) : void {
}
// callback function that should be called when the control's value changes in the UI (blur event)
registerOnTouched(_fn: any):void
{
}
}
шаблон:
<div class="onOffMainDiv" (click)="onClick($event)" [ngClass]="{'active':active==1}" title="ON/OFF"></div>
скажите мне, есливам нужно больше информации
спасибо