实现ControlValueAccessor但它没有将值传播到表单

时间:2017-09-26 09:06:47

标签: angular typescript flatpickr

我正在使用Angular上的反应形式,但是我在从自定义组件传播对表单的更改方面遇到了麻烦。

例如,您可以在plunkr中看到使用flatpickr制作的日期输入组件。

https://plnkr.co/edit/okIjPb6aUcrzx3t7edae?p=info

你可以特别看到这段代码,当它设置属性 date 时,它应该将更改传播到外面的表单,但不是,表单没有被更新。

ngOnInit() {
 this.instance = flatpickr(this.elDate.nativeElement, {
   onChange: (selectedDates, dateStr, instance) => {
     this.date = selectedDates[0];
   }
 });
}
set date(val) {
    this._date = val;
    this.propagateChange(val);
}

plunkr中还有一个反输入示例,它与角度原生事件一起使用,效果很好。

但是在日期输入中,使用自定义事件(我推测)它不起作用。

我认为解决方案与旧版Angularjs中的旧applyAsync类似,但Angular承诺通过使用区域来修复这些问题,所以我不清楚某些事情。我希望对这个问题有所启发。

1 个答案:

答案 0 :(得分:1)

您忘了将控件绑定到FormGroup

<date-input [date]="date" formControlName="date"></date-input>
                          ^^^^^^^^^^^^^^^^^^^
                              add this

<强> Forked Plunker