2016-12-25 2 views
0

Ich habe sehr einfache Form (siehe unten), und das ist ein Problem:Angular 2 Formcontrol nicht Wert erkennen geändert programmatisch

  • wenn ich Eingabewert manuell eingeben, form.controls [ ‚myValue‘]. Wert ändert
  • wenn ich Wert ändern #myInput programmatisch, es total ist

diese Änderung ignorieren Was mache ich falsch?


    @Component({ 
     selector: 'my-app', 
     template: `&ltform [formGroup]="form"> 
      Current value: {{form.controls['myValue'].value}} 
      &ltinput type="text" 
      size=40 
      id="myValue" 
      name="myValue" 
      required 
      [formControl]="form.controls['myValue']"> 

      &ltinput type="button" (click)="updateValue()" value="Update"> 
     </form>` 
    }) 
    export class AppComponent { 

     form:FormGroup; 

     constructor(private fb: FormBuilder) {} 

     ngOnInit() { 
     this.form = this.fb.group({ 
      myValue: new Date().toString() 
     }); 
     } 

     updateValue(){ 
     document.querySelector('#myValue').value = new Date().toString(); 
     } 

    } 

+0

Sie es bitte als Plunker machen oder Geige –

+0

Ihre benötigen json.so Ihr Beitrag aktualisieren mit dem relevanten Json für ** form.controls ** – Aravind

+0

@CharanCherry hier ist es https://plnkr.co/edit/hQGn6nfl6pNkS1zfneEv?p=preview –

Antwort

1

Form-Steuerelement, das an einen Eingang angebracht ist, erkennt Änderungen und abonnieren Sie auf ‚Input‘ Ereignis von HMLTInputElement, aber in Ihrem Fall, dass Sie es von Code direkt zu ändern, so dass die Veranstaltung nicht ausgelöst.

  1. Versuchen zu verwenden Formcontrol Methode setValue()
  2. manuell Feuer ‚Eingang‘ Ereignis über dispatch() -Methode
+0

Danke! Es funktioniert: this.form.controls ['myValue']. ​​SetValue (new Date(). ToString()); Es ist merkwürdig, dass ich keine Erklärung in der Angular-Dokumentation finden konnte und in Ng-Book, ich denke, dieser Beitrag wird anderen Entwicklern helfen. –

+0

Sie möchten vielleicht einen Blick auf die Dokumentation von [FormControl] werfen (https://angular.io/docs /ts/latest/api/forms/index/FormControl-class.html) und bedenken Sie, dass programmatische Änderungen am Wert eines Controls ** nicht ** es als "schmutzig" kennzeichnen. Wenn Sie dies erreichen wollen, müssen Sie 'markAsDirty()' auf Ihrem Steuerelement aufrufen (das aus dem [AbstractControl] stammt (https://angular.io/docs/ts/latest/api/forms/index/AbstractControl- class.html) Klasse, die FormControl erweitert) –

+0

Danke, ich sehe: programmatic Änderung des Texteingabewerts feuert nicht 'Änderung' Ereignis (es wird nur auf Unschärfe ausgelöst) - https://developer.mozilla.org/ru/docs/Web/Ereignisse/ändern –

Verwandte Themen