代码之家  ›  专栏  ›  技术社区  ›  Dino

表单控件更新值在ngoninit()中不更新

  •  1
  • Dino  · 技术社区  · 8 年前

    我正在创建JSON中的动态表单 ngOnInit()

    我要做的是在 恩戈尼尼特() .

    ngOnInit(){
      ...Form creation...
      this.parsedJson.sections[0].form.controls['clientName'].setValue("John");
    }
    

    它不会以这种方式更新控件,如果我手动触发相同的操作(例如:按钮单击),它将进行更新。
    this.parsedJson.sections[0].form.controls['clientName'].setValue("John");

    我也试过用 patchValue 而不是 setValue 但结果是一样的。

    表单创建:

    for(let section of this.parsedJson2.sections){
      section.form  = new FormGroup({});
      if(section.section_type == 'normal') {
        for (let question of section.question_list) {
          if (question.qtype == 'input-text') {
            const control: FormControl = new FormControl(question.answer, Validators.required);
            section.form.addControl(question.key, control);
          }
          if (question.qtype == 'input-email') {
            const control: FormControl = new FormControl(question.answer, Validators.email);
            section.form.addControl(question.key, control);
          }
          if (question.qtype == 'multi-choice') {
            for (let choice of question.qchoices) {
              const control: FormControl = new FormControl(choice.selected, Validators.required);
              section.form.addControl(choice.key, control);
            }
          }
          else {
            const control: FormControl = new FormControl(question.answer, Validators.required);
            section.form.addControl(question.key, control);
          }
        }
      }
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Sebastien Servouze    8 年前

    您必须更新中的控件 ngafterview初始化 .

    这是因为 恩戈尼尼特 在视图完全初始化之前调用。

    更多信息: Angular Lifecycle Hooks

    推荐文章