2016-12-25 2 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 (новая дата(). 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

Спасибо, я вижу: программная смена значения ввода текста не запускает событие «change» (оно запускается только при размывании) - https://developer.mozilla.org/ru/docs/Web/Events/change –

Смежные вопросы