我正在try 创建一个具有Formgroup的模型,我从另一个组件调用该模型,并使用以下代码传递参数

modalRef.componentInstance.question=item.question
etc....

到目前为止,一切都很好,我可以从模型中读取该变量 但我的问题是Form控件总是空的 以下是我的模式代码

import { Component, Input, OnInit } from '@angular/core';
import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';

@Component({
  selector: 'app-modalinput2',
  templateUrl: './modalinput2.component.html',
  styleUrls: ['./modalinput2.component.css']
})
export class Modalinput2Component implements OnInit {
  @Input() question: string = "";
  @Input() answer: string = "";
  @Input() department: string = "";
  @Input() category: string = "";
  @Input() id: string = "";

  myForm: FormGroup;

  constructor(public modal: NgbActiveModal, private formBuilder: FormBuilder) {
    console.log("printing from mdoal "+this.question)
    this.myForm = this.formBuilder.group({
      question: ['', [Validators.required, Validators.minLength(3),Validators.pattern(/^(\s+\S+\s*)*(?!\s).*$/)]],
      answer: ['', [Validators.required, Validators.minLength(3), Validators.pattern(/[\S]/g)]],
      department: [''],
      category: [''],
    });
  }
  ngOnInit(): void {

  }

  getErrorMessage(control: AbstractControl | null): string {
    if (control?.errors) {
      const errorKey = Object.keys(control.errors)[0];
      const errorMessages: Record<string, string> = {
        required: 'This field is required.',
        minlength: 'Minimum length is ' + control.errors?.['minlength']?.requiredLength + ' characters.',
        maxlength: 'the max length is '+control.errors?.['maxlength']?.requiredLength + ' characters.'
       
      };

      return errorMessages[errorKey] || 'Invalid input.';
    }
    return '';
  }

  write() {
    if (this.myForm.valid) {
      const formData = {
        "question": this.myForm.value.question,
        "answer": this.myForm.value.answer,
        "department": this.myForm.value.department,
        "category": this.myForm.value.category,
        "id": this.id
      };

      
      this.modal.close(formData);
    } else {
      console.log("Form is invalid. Please check the input values.");
    }
  }
  
}

这里是它的html

<div class="modal-header modal-lg">
    <h4 class="modal-title" id="modal-basic-title">Profile update</h4>
    <button type="button" class="btn-close" aria-label="Close" (click)="modal.dismiss('Cross click')"></button>
  </div>
  
  
  
  <div class="modal-body">
    <form [formGroup]="myForm">
      <div class="mb-3">
        
        <label for="questions">Question</label>
        <div class="input-group3">
          <input formControlName="question" id="questions" class="form-control" name="questions" />
        </div>
        
        <div *ngIf="myForm.get('question')?.invalid && myForm.get('question')?.touched" class="text-danger">
          {{ getErrorMessage(myForm.get('question')) }}
        </div>
  
      
        <label for="answer">Answer</label>
        <div class="input-group2">
          <input formControlName="answer" id="answer" class="form-control" name="answer" />
        </div>
        
        <div *ngIf="myForm.get('answer')?.invalid && myForm.get('answer')?.touched" class="text-danger">
          {{ getErrorMessage(myForm.get('answer')) }}
        </div>
  
        
        <label for="department">Department</label>
        <div class="input-group">
          <input formControlName="department" id="department" class="form-control" name="department" />
        </div>
  
        
        <label for="category">Category</label>
        <div class="input-group">
          <input formControlName="category" id="category" class="form-control" name="category" />
        </div>
      </div>
  
    </form>
  </div>
  
  
  
  
  <div class="modal-footer">
    <button type="button" class="btn btn-outline-dark" (click)="write()">Save</button>
  </div>

我记得这很管用,但我搞砸了一些东西,现在不管用了

推荐答案

在构造函数中执行操作时,表单初始化似乎有问题, 正在try 移动this.myForm=this.formBuilder.group.....从构造函数到ngOnInit()的代码片段,然后判断.

Angular相关问答推荐

从嵌套组件导航到命名路由中的顶级路由

我使用Ngrx的子集 Select 器不起作用

从Observatory的订阅方法外正确接收JSON数据

如何在HTML外部项目中使用Web组件(以17角创建)

PrimeNG面包屑组件生成奇怪的&

在Angular 多选下拉菜单中实现CDK拖放排序的问题

未触发HTTP拦截器

从、管道和映射可观察到的逻辑?

截取提取后端S获取添加授权头的请求

对REST后端的Angular/Priming过滤器请求导致无限循环

当信号的值发生变化时,模板不会更新

Angular 15 在 URL 中使用@进行路由

Nx Angular Monorepo 中 cypress 组件测试的代码覆盖率?

如何使用指令以Angular 传递默认值

Angular 13 - 何时创建嵌入式视图?

使用 NPM 安装 Font Awesome 5

如何从组件模板将数组作为 Input() 传递?

如何在 Angular 2 中创建可重用的动画

@angular/platform-b​​rowser 与 @angular/platform-b​​rowser-dynamic

Firebase 查询子项的子项是否包含值