angular - TypeScript adaugă funcția pentru o zi
Sunt nou în Angular 2 și TypeScript. Am trecut de la jQuery și am unele probleme cu câteva funcții simple. În momentul de față, am o interfață cu două selectoare de dată și încerc să completez automat al doilea odată ce primul se schimbă (adaugând o zi). Conform acestui articol Adăugarea de zile la Date în javascript/typescript, oferă o dată complet greșită, iar ceea ce mă aștept de la JS, codul trebuie să fie ceva de genul acesta:
updateEndDate(): void {
this.endDate.setDate(this.startDate.getDate() + 1);
}
Am o clasă care are parametrii startDate și endDate, iar metoda updateEndDate() este legată de evenimentul onChange() al câmpului de selecție a datei startDate.
Când încerc, primesc acest mesaj în consolă:
this.endDate.getDate is not a function at ItemTemplateComponent.webpackJsonp..
Cred că fac ceva foarte greșit, dar nu știu ce. Cineva știe ce-mi lipsește?
EDITEAZĂ :
Am încercat cu un parametru de dată auxiliar pentru a verifica dacă există ceva în neregulă cu funcția sau cu parametrul. Am făcut asta:
auxDate: Date;
ngOnInit(): void {
this.auxDate = new Date();
}
updateEndDate(): void {
console.log(auxDate);
this.auxDate.setDate(this.auxDate.getDate() + 1);
console.log(auxDate);
}
Și asta a funcționat bine. Deci problema mea este cu parametrul.
Definiția clasei mele:
export class DateRange {
startDate: Date;
endDate: Date;
}
Am setat startDate folosind un selector de dată care setează formatul „YYYY-MM-DD”. Ar putea acesta fi problema?
ACTUALIZARE (O SOLUȚIE, NU CEA MAI BUNĂ MODALITATE, CRED):
Așa cum am comentat, problema este că atunci când se folosește legarea bidirecțională a datelor pentru a lega valoarea startDate (o Dată) cu inputul corespunzător de tip date din șablon, valoarea inputului este înțeleasă ca un șir de caractere de Angular2, nu ca o Dată, așa că metoda updateEndDate() se prăbușește.
Soluția pe care am găsit-o, dar cred că nu este cea mai bună (cred că trebuie să existe o modalitate de a aplica legarea bidirecțională a datelor pentru date) este să leg doar evenimentul onChange și să convertesc șirul într-o dată în metoda updateEndDate() astfel:
În șablon:
(change)="updateEndDate($event.target.value)"
În componentă:
updateEndDate(dateValee: string): void {
this.endDate = new Date(dateValue);
... OTHER LINES
}
Acum am probleme deoarece "new Date(dateValue)" nu îmi dă data corectă, dar acesta este altă problemă (cred că din cauza GMT sau a unei probleme cu un anumit standard).
Răspuns #1
Nu sunt sigur dacă asta ar putea ajuta, am folosit această declarație pentru a obține data selectată în html (change)="updateEndDate($event)"
În ts
updateEndDate(dateValee: MatDatepickerInputEvent<Event>){
this.endDate= new Date(dateValue.value);
}