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);
}