Angular 2 自定义控件 link 到带有控件值访问器的 ngControl,组合日期选择器

Angular 2 Custom Control link to ngControl with Control Value Accessor, Combo Date Picker

我正在尝试在 Angular 2 中构建一个组合日期选择器,它将日期映射到三个下拉列表,一个用于日,一个用于月,一个用于年。

我正在关注以下优秀文章以获得基本理解:

http://almerosteyn.com/2016/04/linkup-custom-control-to-ngcontrol-ngmodel

在上面的示例中,作者将其链接到 1 个控件,即

<input class="form-control" [(ngModel)]="value" (blur)="onTouched()">

在我的例子中而不是

<input class="form-control" [(ngModel)]="value" (blur)="onTouched()"> 

我有:

<select [(ngModel)]="day">
<option *ngFor="let item of days" value="{{item}}">{{item}}</option>
</select>

<select [(ngModel)]="month">
<option *ngFor="let item of months" value="{{item}}">{{item}}</option>
</select>

<select [(ngModel)]="year">
<option *ngFor="let item of years" value="{{item}}">{{item}}</option>
</select>

使用文章示例中的单个控件,一切正常,因为有两种与 [(ngModel)]="value" 绑定的方式,所以当更新文本字段值时,当我访问它时,更改会反映出来我的 html 页面使用

{{ myform.controls.mydate.value }}

但我不确定如何通过三个下拉菜单实现它?我的意思是,如果任何下拉菜单发生变化,{{ myform.controls.mydate.value }} 应该显示更新后的值。

我还尝试添加 (ngModelChange)="onDateChange()",其中 onDateChange 函数通过根据下拉列表中的所选值组成新日期来设置 _value 的值。但这是行不通的。

谁能指导一下吗?

您需要为包含您问题中的视图 (HTML) 的组件 (ComboDatePickerComponent) 创建自定义 ControlValueAccessor。在 writeValue()onTouched() 中,您可以设置和读取三个单独输入元素的值。