Angular ControlValueAccessor在(change)事件中触发旧值

时间:2018-08-24 04:59:48

标签: angular angular6 controlvalueaccessor

我正在使用Angular v6.0.0,我的组件是实现ControlValueAccessor;
在更改事件中,我总是看到它是旧值,但是当绑定ngModel的值时,它是新值。 我做了一个stackblitz example;

 @HostListener('click')
  onToggle() {
    if (this.disabled) {
      return;
    }
    this.checked = !this.checked;
    this.change.emit(this.checked);
    this.changed(this.checked);
    this.touched(this.checked);
  }

  // Implement control value accessor

  changed = (_: any) => {};

  touched = (_: any) => {};

  public writeValue(obj: any) {
    if (obj !== this.checked) {
      this.checked = !!obj;
    }
  }

  public registerOnChange(fn: any) {
    this.changed = fn;
  }

  public registerOnTouched(fn: any) {
    this.touched = fn;
  }

1 个答案:

答案 0 :(得分:4)

当您使用 EventEmmiter 时,您必须在 output 事件中传递$ event,因为 $ event 保持发射值

这是一个例子

<app-switch size="small" name="skip_notification" (change)="changed($event)" [(ngModel)]="value"></app-switch>

.ts

 changed(event) {
    this.value1 = event;
  }

此处已更新Stackblitz