【问题标题】:Angular select dropdown角度选择下拉菜单
【发布时间】:2019-08-07 18:53:48
【问题描述】:

我遇到的问题是当我尝试将列表数据放入选择下拉列表时

我从这里尝试了一个解决方案formGroup expects a FormGroup instance 但没有运气

我的组件如下所示:

 export class LandingPageComponent {
  submitted = false;
  oppoSuits: any = ['Men', 'Women', 'Boys', 'Inspiration']

  constructor(public fb: FormBuilder) { }

  oppoSuitsForm = this.fb.group({
    name: ['', [Validators.required]]
  })

  changeSuit(e) {
    this.oppoSuitsForm.get('name').setValue(e.target.value, {
      onlySelf: true
    })
  }


  public handleError = (controlName: string, errorName: string) => {
    return this.oppoSuitsForm.controls[controlName].hasError(errorName);
  }

  ngOnInit() {
    this.oppoSuitsForm = new FormGroup({
      name: new FormControl(""),

    });
  };
  onSubmit() {
    this.submitted = true;
    alert(JSON.stringify(this.oppoSuitsForm.value))
  }
}

和html文件:

<form [formGroup]="oppoSuitsForm" (ngSubmit)="onSubmit()">
        <select formControlName="name" (change)="changeSuit($event)">
          <option value="">Choose oppo suit</option>
          <option *ngFor="let suit of oppoSuits">{{suit}}</option>
        </select>
          <div class="error-block" *ngIf="submitted && handleError('name', 'required')">
            You must provide a value!
          </div>

        <button>Submit</button>
 </form>

在控制台我得到这个: 错误:formGroup 需要一个 FormGroup 实例

和:

无法读取未定义的属性“get”

【问题讨论】:

  • 试试&lt;form [formGroup]="oppoSuitsForm" (ngSubmit)="onSubmit()" *ngIf="oppoSuitsForm"&gt; 表单实际上是异步的
  • 如果我尝试使用 *ngIf="" 表单正在消失
  • 是的,没看代码。我现在看到您还有其他问题。

标签: angular


【解决方案1】:

您正在定义表单组两次。你只需要实例化一次,我建议在构造函数中这样做。

@Component({...})
export class Component {
  oppoSuitsForm: FormGroup;

  constructor (private fb: FormBuilder) {
    this.oppoSuitsForm = this.fb.group({
      name: ['', [Validators.required]]
    });
  }
}

这应该可以解决你的两个错误。

【讨论】:

  • 这样吗? submitted = false; oppoSuits: any = ['Men', 'Women', 'Boys', 'Inspiration'] oppoSuitsForm: FormGroup; constructor (private fb: FormBuilder) { this.oppoSuitsForm = this.fb.group({ name: ['', [Validators.required]] }); } 还是一样的错误
  • 是的,在构造函数中实例化表单,并在定义属性和 ngOnInit 函数时删除代码中的两个实例。
  • 好的,删除了 ngOnInit 函数.. 但仍然是同样的错误。也许缺少一些东西
  • 这应该可行,您可以为您的问题创建一个堆栈闪电战吗?
  • 它很有趣.. 在我的本地文件中它不起作用。在 stackblitz 中它的工作.. stackblitz.com/edit/angular-vsar77 我使用版本 8
猜你喜欢
  • 2018-09-23
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2014-10-18
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多