Как я могу отключить каждое отдельное средство выбора даты, если модель даты меньше текущей даты или если дата «истекла».
Я разрабатываю пользовательский интерфейс с датпикерами для дат начала и окончания. Первоначально пользовательский интерфейс может иметь столько средств выбора даты, сколько необходимо, в зависимости от данных, возвращаемых из серверной части. Пользователи также могут добавить дополнительные средства выбора даты.
Вот пример данных, которые я использую для создания средств выбора даты с помощью ngRepeat
.
{
"id": 1234,
"seasons": [{
"endDate": "2016-01-03",
"startDate": "2015-09-10",
"description": "2015"
}, {
"endDate": "2017-01-03",
"startDate": "2016-09-10",
"description": "2016"
}]
}
Я создаю пользовательский интерфейс, в котором пользователи могут изменять даты с помощью средств выбора даты, только если дата начала и окончания не истекла. В случаях, когда дата истекла, средство выбора даты необходимо отключить.
Вот мой пользовательский интерфейс для справки.
Мой текущий подход состоит в том, чтобы перебирать массив сезонов и проверять, меньше ли startDate, чем сегодня.
ss.datePickerStartDateEnabled = false;
angular.forEach(ss.seasonSet.seasons, function(season, key) {
if (season.startDate < today) {
console.log('Less than today');
ss.datePickerStartDateEnabled = true;
}
});
Пока работает, но отключает startDate не меньше сегодняшнего.
Вот мой html
<div class="row" ng-repeat="s in ss.seasonSet.seasons track by $index">
<div ng-controller="DatePickerCtrl as datePicker">
<div class="col-md-3"> <!-- StartDate datepicker-->
<div class="form-group has-feedback">
<label for="username">Start Date</label>
<input
type="text"
class="form-control"
id="startDate{{$index}}" <!-- id=startDate1 -->
uib-datepicker-popup="{{}}"
ng-model="s.startDate"
is-open="datePicker.isOpen.startDate"
datepicker-options="datePicker.dateOptions"
ng-required="true"
ng-disabled="ss.datePickerStartDateEnabled"
close-text="Close"
ng-click="datePicker.open($event, 'startDate')"/>
<span class="form-control-feedback glyphicon glyphicon-calendar"></span>
</div>
<div class="form-group has-feedback">
<label for="username">End Date</label>
<input
type="text"
class="form-control"
id="endDate+{{$index}}"
uib-datepicker-popup="{{}}"
ng-model="s.endDate"
is-open="datePicker.isOpen.endDate"
datepicker-options="datePicker.dateOptions"
ng-required="true"
close-text="Close"
ng-click="datePicker.open($event, 'endDate')"/>
<span class="form-control-feedback glyphicon glyphicon-calendar"></span>
</div>
</div>
</div>
</div>
Как я могу использовать id="endDate+{{$index}}"
во входных данных средства выбора даты вместе с ng-disabled="ss.datePickerStartDateEnabled"
и ss.datePickerEndtDateEnabled
в моем контроллере, чтобы отключить одно средство выбора даты на основе условия, указанного выше.
Есть и другие проверки, которые мне нужно сделать, например. никакие перекрывающиеся даты и дата начала не должны быть позже предыдущей даты окончания. Сначала я пытаюсь решить простой случай.
Заранее спасибо. Вот код плункера, а вот UI, хотя средство выбора даты и времени не работает. Смотрите его в полноэкранном режиме для лучшего пользовательского интерфейса.