Ссылка на пользовательский элемент управления Angular 2 на ngControl с элементом доступа к контрольному значению, комбинированным средством выбора даты

Я пытаюсь создать комбинированное средство выбора даты в 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, составляя новую дату в зависимости от выбранного значения в раскрывающемся списке. Но это не работает.

Кто-нибудь может помочь?


person Naveed Ahmed    schedule 14.05.2016    source источник
comment
Не могли бы вы опубликовать решение этого вопроса?   -  person ASR    schedule 23.05.2017


Ответы (1)


Вам необходимо создать собственный ControlValueAccessor для компонента (ComboDatePickerComponent), который содержит представление (HTML) из вашего вопроса. В writeValue() или onTouched() вы можете установить и прочитать значения трех отдельных элементов ввода.

person Günter Zöchbauer    schedule 14.05.2016