쉬운 방법은 설정자와 함께 fecha 속성을 갖는 것입니다. 당신이
year:number;
month:number;
get fecha():any
{
return new Date(this.year,this.month-1,1)
}
console.log(year,month,fecha);
이 구성 요소에 그래서 당신이 ngModel이있는 경우, [(ngModel)]
<select [value] = "exp.StartDate.Month" (input)="updateMonth($event.target.value)" >
...
</select>
<select [value] = "exp.StartDate.Year" (input)="updateYear($event.target.value)">
//In your component
updateMonth(month:number)
{
this.exp.StartDate.Month=month;
this.exp.StartDate.Value=this.exp.StartDate.Year+'-'+this.exp.StartDate.Mont+'-1';
}
updateYear(year:number)
{
this.exp.StartDate.Year=year;
this.exp.StartDate.Value=this.exp.StartDate.Year+'-'+this.exp.StartDate.Mont+'-1';
}
을 분할하거나 값을 제어하는 사용자 지정 양식 컨트롤을 만들 수 있습니다. 귀하의 exp.StartDate가 자바 스크립트 날짜인지 아닌지는 알 수 없습니다. 나는 자바 스크립트 Date 객체를 기대하는 사용자 정의 폼 컨트롤을 사용하여 코드를 작성한다. (문자열을 사용하여 코드를 변경하려고하면)
import { Component, forwardRef, HostBinding, Input } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
//Really TODO change input to select
@Component({
selector: 'app-month-year',
template: `
<input [disabled]="disabled" [value] = "month" (input)="updateMonth($event.target.value)" >
<input [disabled]="disabled" [value] = "year" (input)="updateYear($event.target.value)">
`,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MonthYearComponent),
multi: true
}
]
})
export class MonthYearComponent implements ControlValueAccessor {
month:number;
year:number;
// Allow the input to be disabled, and when it is make it somewhat transparent.
@Input() disabled = false;
@Input('value') value;
onChange: any =() => { };
onTouched: any =() => { };
updateMonth(month:number)
{
this.month=month;
this.value=this.getDate(); //<--change the "value"
this.onChange(this.value);
}
updateYear(year:number)
{
this.year=year;
this.value=this.getDate(); //change the value
this.onChange(this.value);
}
constructor() { }
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
writeValue(value) { //<--when receive a value
if (value) {
this.month=value.getMonth()+1;
this.year=value.getFullYear();
}
}
setDisabledState(isDisabled: boolean): void {
this.disabled = isDisabled;
}
//It's better use a function to return the value
private getDate()
{
const date=new Date();
date.setFullYear(this.year,this.month-1,1);
return date;
}
}
datepickers가 date 객체를 date 객체로 대체하지 않는 한 아무런 문제가 없어야한다. 완전히 새로운 것. 값을 변경할 때만 날짜 객체를 수정하면 작업해야합니다. –
만약 내가 이해한다면 그냥 보자 : ngModelChange를 사용하여 둘 다 단일 날짜 객체를 업데이트하면 괜찮을까요? \t 그들은 날짜 선택 도구가 아니며 월/연도 데이터가있는 드롭 다운 목록 일뿐입니다. –
내가 말한 것은 당신이 가지고있는 선택기에 전체 날짜 객체를 바인딩하고 객체를 새로운 객체로 교체하여 객체를 업데이트하면 문제가 발생한다는 것입니다. 그러나 피커가 내부적으로 날짜 개체를 수정하여 날짜 개체를 변경하는 경우 (예 : date_object.setTime (1332403882588)) 괜찮을 것입니다. 그러나 코드를 게시 할 경우 도움이 될 수 있습니다. –