Угловой 2 - ControlValueAccessor - (ngModelChange) не запущен - PullRequest
0 голосов
/ 18 сентября 2018

[править: этот код на самом деле работает, поэтому он может служить простым примером того, как реализовать 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>

скажите мне, есливам нужно больше информации

спасибо

1 Ответ

0 голосов
/ 19 сентября 2018

вчера не работал, сегодня утром пришел на работу, и он работал, пока я демонстрировал проблему коллеге

возможно внутреннее состояние компилятора было испорчено, и перезапуск проекта сделал свое дело

ненавижу когда это случается

...