Как динамически создать formControlName в Angular 4?

Я хочу создать formControlName динамически, вот мой код в компоненте,

КОД КОНТРОЛЛЕРА

ngOnInit() {
  this.rForm = this.fb.group({
     question_type_id: this.fb.array([]),
  });

  for (let i = 0; i < this.getQuestionsType.length; i++) {
     const control = <FormArray>this.rForm.controls['question_type_id'];
     control.push(this.initAddress(i));
  }
}

initAddress(i) {
  var ans = "is_answer_"+i;

  return this.fb.group({
    ans: ['']
  });
}

Итак, я хочу formControlName

is_answer_0
is_answer_1
is_answer_2

person Chaudhary    schedule 24.03.2018    source источник


Ответы (2)


В es6 объекты можно создавать с помощью вычисляемых ключей. . Итак, давайте использовать его:

initAddress(i) {
  var ans = "is_answer_" + i;

  return this.fb.group({
    [ans]: ['']
    ^^^^^
  });
}

Пример Ng-run

Вы должны знать, что если машинописный текст имеет цель es5, то он будет преобразован в что-то вроде:

var controlConfig = {};
controlConfig[ans] = [''];

Так что это ваш второй вариант

person yurzui    schedule 24.03.2018

Попробуйте код ниже. Это, безусловно, работает!

ngOnInit() {
  for(var i = 0; i < this.getQuestionsType.length; i++) {
    <FormArray>this.rForm.get('question_type_id').push(new FormControl("is_answer_"+i));
  }
}
person Biju Maharjan    schedule 24.03.2018