В Ionic 3 (ion-datetime) Можно отображать как предварительно назначенное значение, так И заполнитель?

#ionic3

#ionic3

Вопрос:

Я создаю приложение Ionic 3, которое содержит средство выбора ion-datetime для выбора даты. Меня попросили начать выбор с определенной даты (чтобы старшим пользователям не приходилось слишком много прокручивать), но при этом разрешить пользователю выбирать более новые или более старые даты по сравнению с этим предварительно назначенным значением.

Итак, мой ion-datetime выглядит следующим образом:

 <ion-datetime type="date" displayFormat="DD/MMM/YYYY" pickerFormat="DD/MMM/YYYY" placeholder="Select Date" [max]="today" [(ngModel)]="startingDate" // more parameters after that>
  

В этом случае ‘ today ‘ — это текущая дата, установленная с помощью обычной const date = new Date(); , тогда как ‘ startingDate ‘ устанавливается программно при инициализации компонента, беря текущее значение date и вычитая оттуда 18 лет. Это работает хорошо, и если сегодня 19 марта 2019 года, то startingDate устанавливается на 19 марта 2001 года.

Пока все хорошо. С одной проблемой: при заданном начальном значении, присвоенном с помощью ngModel, атрибут ‘placeholder’ переопределяется. Это может привести к тому, что мои пользователи будут полагать, что дата была предварительно выбрана для них, или случайно пролистают ввод даты и отправят неправильное значение.

Мой вопрос: могу ли я сделать placeholder атрибут с текстовым индикатором, подобным тому, что в коде, и значением по умолчанию, установленным [(ngModel)]="startingDate" , сосуществующими в представлении? Смысл не в том, чтобы показывать оба значения в поле ввода, а в том, чтобы заранее назначенное значение было готово для предварительного заполнения селектора даты, когда пользователь нажимает на поле. Я пытался изменить использование [(ngModel)] на присвоение [значения] (как с [], так и без него), но в этом сценарии значение не устанавливается внутри моего средства выбора даты и времени.

Ответ №1:

Итак, что вы можете использовать, так это интерполяцию строк для вашего заполнителя и использовать ту же переменную для вашей предварительно выбранной даты.

 <ion-datetime type="date" displayFormat="DD/MMM/YYYY" pickerFormat="DD/MMM/YYYY" placeholder={{startingDate}} [max]="today" ngModel // more parameters after that>
  

В некоторых случаях, если вы не манипулировали своей строкой даты, вы получите полное значение даты, потому что pickerFormat и DisplayFormat не распознают значение заполнителя.

Вы можете изменить внешний вид на любой, какой захотите.

 public Date: any = new Date();

public startingDate: any = this.Date.getMonth()   1   '/'   this.Date.getDate()   '/'   (this.Date.getFullYear() - 18);
  

Комментарии:

1. Привет, Стивен, не совсем то, что я искал (хотя ты заставил меня увидеть, что часть предпосылки вопроса была недостаточно ясной, и я отредактировал ее, так что спасибо за это!). Что я ищу, так это текстовый заполнитель, подобный тому, что был в моем исходном сообщении, чтобы пользователь видел текст «Выберите дату», прежде чем он / она откроет средство выбора даты и времени, чтобы сделать выбор.

2. @JurgenBlitz Я немного запутался. Итак, вам нужен заполнитель, но вы также хотите, чтобы отображалась начальная дата? или показывать только после выбора поля формы?

3. идея заключается в том, чтобы заполнитель отображался до того, как пользователь нажмет на ввод. В настоящее время, если я не включаю заполнитель, когда я нажимаю на фактический селектор даты и времени, «колесо» для даты уже установлено на мой startingDate. Я хочу сохранить это поведение, но включить заполнитель, чтобы он мог присутствовать до тех пор, пока пользователь не нажмет.