代码之家  ›  专栏  ›  技术社区  ›  Naveed Ahmed

Angular 2 Custom Control链接到ngControl,带有Control Value Accessor和Combo Date Picker

  •  1
  • Naveed Ahmed  · 技术社区  · 10 年前

    我正在尝试在Angular2中构建一个组合日期选取器,它将一个日期映射到三个下拉列表,一个表示日,一个代表月,另一个表示年。

    为了基本理解,我正在阅读以下优秀文章:

    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”绑定,所以当文本字段值更新时,当我使用

    {{ myform.controls.mydate.value }}
    

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

    我还尝试添加(ngModelChange)=“onDateChange()”,其中onDateChange函数通过根据下拉列表中的选定值组合新的日期来设置_value的值。但这不管用。

    有人能给我引路吗?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Günter Zöchbauer    10 年前

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

    推荐文章