2017-09-19 2 views
0

Um zu beginnen: Ich versuche, ein Formular mit eckigen 2 Materialkomponenten zu erstellen. Ich habe ein Formular Datumsauswahl enthält:Wie binden Sie eine model.property an ngModel des angular-2-material date picker?

 <md-form-field> 
      <input readonly="true" mdInput [mdDatepicker]="regDatePicker" placeholder="{{'client.regdate-placeholder'}}"> 
      <md-datepicker-toggle mdSuffix [for]="regDatePicker"></md-datepicker-toggle> 
      <md-datepicker #regDatePicker startView="month" [startAt]="currentDate"></md-datepicker> 
     </md-form-field> 

Typoskript:

public client: IPerson; 
    @ViewChild("regDatePicker") 
    public regDatePicker: MdDatepicker<Date>; 

Was benötigt wird, um: entweder Datumsauswahl des ngModel zu client.registrationDate binden, oder hinter von Codewert von regDatePicker einstellen .

Was ich bekomme:: im Fall von [(Wert)] Bindung, ich sehe Fehler, dass

Can't bind to 'mdDatepicker' since it isn't a known property of 'input' 

versucht, es hinter in Code zu setzen, kann aber nicht die richtigen Namen des Eigentums finden oder Feld, um den Wert zu setzen.

Frage: Was soll ich tun, um Daten vom Modell zu binden?

UPD: Added-Code, der

@ViewChild("dpDateInput") 
public dpDate: MdDatepickerInput<Date>; 

public ngAfterViewInit(): void { 
    console.log(`---------->>>>>>>>> before ${ this.dpDate.value}`) 
    this.dpDate.value = this.client.regDate; 
    console.log(`---------->>>>>>>>> after ${ this.dpDate.value}`); 
} 
+0

Können Sie den Code anzeigen, mit dem Sie auf den Wert verweisen? – amal

Antwort

0

Versuchen zu verwenden mdDatepickerInput statt mdDatepicker auf Input bezieht, während auf die value Bezug genommen wird.

EDIT

Eine Möglichkeit, Änderungen an der Benutzeroberfläche zu reflektieren würde durch ChangeDetectorRef Konstruktor der Komponente Injektion sein und seine detectChanges() Methode aufrufen.

import { ChangeDetectorRef } from '@angular/core'; 

constructor (private ref: ChangeDetectorRef) {} 

public ngAfterViewInit(): void { 
    console.log(`---------->>>>>>>>> before ${ this.dpDate.value}`) 
    this.dpDate.value = this.client.regDate; 
    this.ref.detectChanges(); 
    console.log(`---------->>>>>>>>> after ${ this.dpDate.value}`); 
} 
+0

Ich habe Code hinzugefügt (es verwendet Ihren Vorschlag), aber das hat nicht funktioniert für mich. Die Konsole zeigt, dass sich der Wert tatsächlich geändert hat, aber die Benutzeroberfläche wurde nicht aktualisiert. –

+0

Bitte checkout my updated my answer. – amal

+0

versuchte Ihren Ansatz, aber immer noch nicht erfrischend –