2017-11-22 9 views
0

두 개의 캘린더가 하나의 양식에 있습니다. 하나는 시작 날짜이고 다른 하나는 종료 날짜입니다. 저는 'ng-pick-datetime'(https://www.npmjs.com/package/ng-pick-datetime)을 사용하여 크로스 브라우저 캘린더 피커를 사용하고 있습니다.각도 2의 날짜 피커에서 날짜 배열 비활성화

목표는 의 날짜를 1970 년 1 월 1 일부터 시작일 캘린더에서 선택한 날짜까지 차단하는 것입니다.

여기에있는 것은 종료일이 시작일 이후인지 확인하는 것입니다.

이렇게하려면 ng-pick-datetime 'picker에는 [disabledDates] 속성이 있습니다.이 속성은 선택할 수 없어야하는 날짜 배열을 기다리고 있습니다.

나는이 속성을 양식이 만들어 질 때 함수에서 만들어지는 금지 된 날짜 배열에 바인딩하고 끝 날짜 달력에 포커스가있을 때마다 바인딩합니다.

내 금지 된 배열을 인쇄하여 제대로 만들어 졌는지, 그리고 포함 된 날짜가 선택한 날짜와 시작 날짜 사이에 있는지 확인합니다. 이 부분이 잘 작동하는 것 같습니다.

브라우저 콘솔 오류가 발생하지 않습니다. 종료일 캘린더 선택기가 어떤 날짜도 차단하지 않도록하십시오.

이 내 템플릿 코드 :

<div class="input-control col-sm-6" [class.has-error]="startDate.invalid && startDate.dirty"> 
     <label class="control-label" for="startDate">Starting Date *</label> 
     <owl-date-time 
      [(ngModel)]="data.startDate" 
      [dateFormat]="'DD-MM-YYYY'" 
      [inputId]="'startDate'" 
      [placeHolder]="'dd-mm-aaaa'" 
      [type]="'calendar'" 
      [dataType]="'date'" 
      [autoClose]="'true'" 
      id="startDate" 
      name="startDate" 
      #startDate="ngModel" 
      [disabled]="!paramsService.isSolicitante()" 
      [hideClearButton] 
      required> 
     </owl-date-time > 
</div> 

<div class="input-control col-sm-6" [class.has-error]="endDate.invalid && endDate.dirty"> 
     <label class="control-label" for="endDate">Ending Date *</label> 
     <owl-date-time 
      [(ngModel)]="data.endDate" 
      [dateFormat]="'DD-MM-YYYY'" 
      [inputId]="'endDate'" 
      [placeHolder]="'dd-mm-aaaa'" 
      [type]="'calendar'" 
      [dataType]="'date'" 
      [autoClose]="'true'" 
      id="endDate" 
      name="endDate" 
      #endDate="ngModel" 
      [disabled]="!paramsService.isSolicitante()" 
      [hideClearButton]="!paramsService.isSolicitante()" 
      [disabledDates]="'forbiddenDates'" 
      (onFocus)="getForbiddenEndDates()" 
      required> 
     </owl-date-time > 
</div> 

//printing of selected date values: 
<div class="col-sm-6">{{ data.startDate}}</div> 
<div class="col-sm-6">{{ data.endDate}}</div> 

{{ this.forbiddenDates }} //printing of the dates array to check it 

그리고 이것은 여기에서 중요한 부분 만 구성 요소 코드 (타이프 라이터)입니다 :

forbiddenDates: Date[] = []; 

ngAfterViewInit(): void { this.getForbiddenEndDates(); } 


// This creates an array of Dates from the beginning of all times to the value of startDate 
getForbiddenEndDates(): void { 
let dateZero: Date = new Date(0); 
let forbiddenDates: Date[] = []; 
while (dateZero <= this.data.startDate){ 
    forbiddenDates.push(new Date(dateZero)); 
    dateZero.setDate(dateZero.getDate() + 1); 
} 
this.forbiddenDates = forbiddenDates; 
} 

Screenshot of the form and the forbidden dates array printed

답변

0

나 자신에 응답합니다. 이 [disabledDates] 템플릿 속성은 동적으로 변경되지 않으므로 일정한 날짜 배열에만 적용됩니다.

솔루션은 훨씬 간단합니다. 이 템플릿 속성을 endDate 입력 필드에 추가하십시오.

[min]="data.startDate"