2016-12-25 32 views
0

我有非常簡單的形式(見下文),並且這是一個問題:角2 formControl沒有檢測值改變編程

  • 當我手動輸入的輸入值,form.controls [「myvalue的」]。值更改
  • 如果我以編程方式更改#myInput價值,這是完全無視這種變化

我在做什麼錯?


    @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

請它作爲一個plunker或擺弄 –

+0

需要你json.so更新您的文章與相關的JSON的** form.controls ** – Aravind

+0

@CharanCherry這裏是https://plnkr.co/edit/hQGn6nfl6pNkS1zfneEv?p=preview –

回答

1

表單控件,它連接到輸入,通過訂閱的HMLTInputElement的「輸入」事件檢測的變化,但在你的情況下,你直接從代碼更改,因此事件不會開火。

  1. 嘗試使用formControl的setValue()方法
  2. 手動火 '輸入' 通過dispatchEvent事件()方法
+0

謝謝!它的工作原理:this.form.controls ['myValue']。setValue(new Date()。toString());奇怪的是我在Angular文檔和Ng-Book中找不到解釋,我認爲這篇文章會幫助其他開發者 –

+0

您可能想看看[FormControl]的文檔(https://angular.io/docs /ts/latest/api/forms/index/FormControl-class.html),並記住對控件值的編程更改將不會**標記爲「髒」。如果你想達到這個目標,你需要在你的控件上調用'markAsDirty()'(源自[AbstractControl](https://angular.io/docs/ts/latest/api/forms/index/AbstractControl- class.html)FormControl擴展的類) –

+0

謝謝,我看到:文本輸入值的程序化更改不會觸發「更改」事件(僅在模糊時才觸發) - https://developer.mozilla.org/ru/docs/Web/Events/change –