2015-03-08 2 views
1

Я использую Bootstrap Angular DatepickerНесколько Datepickers/Min Дата Bootstrap Угловая Datepicker

У меня есть два вопроса, идущие один здесь. У меня есть два сборщика даты. Начальный выбор даты и выбор даты.

Моя первая проблема заключается в том, что при нажатии на кнопку «Дата начала» отображаются календари выбора даты.

Я попытался создать отдельную функцию для каждого ng-click на дата-подборщика, open() на дату начала и open2() на дату окончания, так что каждый из них будет показывать свой собственный календарь, но и держать выскакивают при нажатии на выбор даты начала.

Я отключил дату выбора даты, пока первая дата не выбрана через ng-disabled="!dt".

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

Я попытался min-date="dt + 1", но это не увеличивает день - это просто устанавливает его в тот же день с даты начала ....

Любая помощь очень ценится. Спасибо

У меня есть отредактированный Plunker, но код также приведен ниже.

HTML

<!doctype html> 
<html ng-app="ui.bootstrap.demo"> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script> 
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.1.js"></script> 
<script src="example.js"></script> 
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"> 
</head> 
<body> 

<div ng-controller="DatepickerDemoCtrl"> 


<h4>Start Date</h4> 
<div class="row"> 
    <div class="col-md-6"> 
     <p class="input-group"> 
      <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dt" is-open="opened" min-date="minDate" max-date="'2015-06-22'" datepicker-options="dateOptions" date-disabled="disabled(date, mode)" ng-required="true" close-text="Close" /> 
      <span class="input-group-btn"> 
      <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button> 
      </span> 
     </p> 
    </div> 
</div> 
<h4>End Date</h4> 
<div class="row"> 
    <div class="col-md-6"> 
     <p class="input-group"> 
      <input type="text" ng-disabled="!dt" class="form-control" datepicker-popup="{{format}}" ng-model="dt2" is-open="opened" min-date="dt + 1" max-date="'2015-06-22'" datepicker-options="dateOptions" date-disabled="disabled(date, mode)" ng-required="true" close-text="Close" /> 
      <span class="input-group-btn"> 
      <button type="button" ng-disabled="!dt" class="btn btn-default" ng-click="open2($event)"><i class="glyphicon glyphicon-calendar"></i></button> 
      </span> 
     </p> 
    </div> 
</div> 

<pre>Start date is: <em>{{dt | date:'fullDate' }}</em></pre> 
<pre>End date is: <em>{{dt2 | date:'fullDate' }}</em></pre> 

<hr /> 
<button type="button" class="btn btn-sm btn-info" ng-click="today()">Today</button> 
<button type="button" class="btn btn-sm btn-default" ng-click="dt = '2009-08-24'">2009-08-24</button> 
<button type="button" class="btn btn-sm btn-danger" ng-click="clear()">Clear</button> 
<button type="button" class="btn btn-sm btn-default" ng-click="toggleMin()" tooltip="After today restriction">Min date</button> 
</div> 
</body> 
</html> 

JS

angular.module('ui.bootstrap.demo', ['ui.bootstrap']); 
angular.module('ui.bootstrap.demo').controller('DatepickerDemoCtrl', function ($scope) { 

$scope.clear = function() { 
    $scope.dt = null; 
    $scope.dt2 = null; 
}; 

$scope.toggleMin = function() { 
    $scope.minDate = $scope.minDate ? null : new Date(); 
}; 
$scope.toggleMin(); 

$scope.open = function($event) { 
    $event.preventDefault(); 
    $event.stopPropagation(); 

    $scope.opened = true; 
}; 

$scope.open2 = function($event) { 
    $event.preventDefault(); 
    $event.stopPropagation(); 

    $scope.opened = true; 
}; 

$scope.dateOptions = { 
    formatYear: 'yy', 
    startingDay: 1 
}; 

$scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; 
    $scope.format = $scope.formats[0]; 
}); 
+0

спасибо, что вам удалось помочь –

ответ

1

Два выбора даты Open в то время в angularjs

в своем коде вы имеете пользователя такой же метод, чтобы открыть Date Picker всплывающее окно код в реальном времени находится здесь: http://jsfiddle.net/RLQhh/974/

$scope.open1 = function($event) { 
    $event.preventDefault(); 
    $event.stopPropagation(); 

    $scope.opened1 = true; 
    $scope.opened2 = false; 
}; 

$scope.open2 = function($event) { 
    $event.preventDefault(); 
    $event.stopPropagation(); 
    $scope.opened1 = false; 
    $scope.opened2 = true; 
}; 
+0

А я вижу - спасибо. это прекрасно работает сейчас. Однако я еще не определил, как увеличить начальную дату. Мой второй вопрос выше - любые идеи? – fidev

+0

hi @fidev вы можете использовать атрибут min-date –

+0

var d = дата; \t \t d.setDate (d.getDate() + no_days); dt = d; –

1

привет это изменение я сделал на дату мин

живой код http://jsfiddle.net/RLQhh/1003/

/****new min date code */ 
    $scope.dateChange = function(event){   
     var d= $scope.minDate1.setDate($scope.dt.getDate() + 1); 
     $scope.minDate1=new Date(d); 
    } 
    /****new min date code end */ 

    $scope.toggleMin = function() { 
    $scope.minDate = $scope.minDate ? null : new Date(); 
     $scope.minDate1 = new Date(); 
    }; 

HTML код

<h4>Start Date</h4> 
    <div class="row"> 
     <div class="col-md-6"> 
      <p class="input-group"> 
       <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dt" is-open="opened1" min-date="minDate" max-date="'2015-06-22'" datepicker-options="dateOptions" date-disabled="disabled(date, mode)" ng-required="true" ng-change="dateChange($event)"close-text="Close" /> 
       <span class="input-group-btn"> 
       <button type="button" class="btn btn-default" ng-click="open1($event)"><i class="glyphicon glyphicon-calendar"></i></button> 
       </span> 
      </p> 
     </div> 
    </div> 
    <h4>End Date</h4> 
    <div class="row"> 
     <div class="col-md-6"> 
      <p class="input-group"> 
       <input type="text" ng-disabled="!dt" class="form-control" datepicker-popup="{{format}}" ng-model="dt2" is-open="opened2" min-date="minDate1" max-date="'2015-06-22'" datepicker-options="dateOptions" date-disabled="disabled(date, mode)" ng-required="true" close-text="Close" /> 
       <span class="input-group-btn"> 
       <button type="button" ng-disabled="!dt" class="btn btn-default" ng-click="open2($event)"><i class="glyphicon glyphicon-calendar"></i></button> 
       </span> 
      </p> 
     </div> 
    </div> 
+0

@fidev., Когда вы используете значение атрибута Dynamic min-date, будьте осторожны. это может привести к ошибке проверки при отправке формы, если вы правильно ее обработали. –

+0

Я закончил использование '$ scope.dateChange = function (event) { \t \t \t var d = new Date(); \t \t \t $ scope.minDate1 = d.setDate ($ scope.dt.getDate() + 1); \t}; 'поскольку этот код не мог работать так, как вы. Это по сути то же самое, что и ваш код. Благодаря :) – fidev

0

для диапазона выбора ISS ue (установить минимальную дату для второго datePicker):
Я представляю ADMdtp модуль. Это чистый AngularJs DateTimePicker с большим количеством Greate опций:

  • полностью синхронизирован с ngModel, поэтому нет необходимости, чтобы уничтожить или manulay обновить DateTimePicker.
  • предварительный выбор дальности; сделать так много dateTimePicker, как вы хотите связать вместе, и снова не нужно уничтожать или вручную обновлять каждый dateTimePicker.
  • disabing pattern; так легко вы можете отключить любой день (ы) в неделю или месяц, как и все выходные.
  • переход на изменение дней. (из проклятия вы можете отключить его в опциях)
  • получать полные данные даты, такие как дата в формате UNIX, формат даты и год, месяц, день, час и минута отдельно и ... по атрибуту full-data.
  • ...

<adm-dtp ng-model="date1" full-data="date1_full"></adm-dtp>
<adm-dtp ng-model="date2" mindate="{{date1_full.unix}}"></adm-dtp>

0

Я сделал это в динамический DatePicker так что вам не придется создать несколько $ scope.open() для каждого элемента Datepicker.

Вот что я изменил в HTML

для DT: является открытым = "dtOpened " нг-клик =" открытым ($ события, 'dtOpened')"

для dt2: является открытой = "dt2Opened " нг-клик =" открытое ($ событие, 'dt2Opened')"

Затем добавьте параметр в $ scope.Open ($ событий) функции и становится $ scope.Open ($ событий, которые)

здесь весь код

<h4>Start Date</h4> 
<div class="row"> 
<div class="col-md-6"> 
    <p class="input-group"> 
     <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dt" is-open="**dtOpened**" min-date="minDate" max-date="'2015-06-22'" datepicker-options="dateOptions" date-disabled="disabled(date, mode)" ng-required="true" close-text="Close" /> 
     <span class="input-group-btn"> 
     <button type="button" class="btn btn-default" ng-click="open($event,**'dtOpened'**)"><i class="glyphicon glyphicon-calendar"></i></button> 
     </span> 
    </p> 
</div> 
</div> 
<h4>End Date</h4> 
<div class="row"> 
<div class="col-md-6"> 
    <p class="input-group"> 
     <input type="text" ng-disabled="!dt" class="form-control" datepicker-popup="{{format}}" ng-model="dt2" is-open="**dt2Opened**" min-date="dt + 1" max-date="'2015-06-22'" datepicker-options="dateOptions" date-disabled="disabled(date, mode)" ng-required="true" close-text="Close" /> 
     <span class="input-group-btn"> 
     <button type="button" ng-disabled="!dt" class="btn btn-default" ng-click="open($event**,'dt2Opened'**)"><i class="glyphicon glyphicon-calendar"></i></button> 
     </span> 
    </p> 
</div> 

$scope.open = function($event,which) { 
$event.preventDefault(); 
$event.stopPropagation(); 
$scope[which]= true; 
}; 
Смежные вопросы