【问题标题】:Angular ngIf formGroupAngular ngIf 表单组
【发布时间】:2019-04-21 21:13:02
【问题描述】:

我在 Angular 上有一个表单,它允许根据下拉列表中选择的值显示输入。

这是我的代码示例:

(如果选择了两个,则会出现一个输入)

https://stackblitz.com/edit/angular-fqkfyx

如果我离开 [formGroup] = "usForm" 输入显示不起作用。另一方面,如果我删除标签表单的 [formGroup] = "usForm" 我的代码可以按我的意愿工作。所以问题与 [formGroup] = "usForm"

有关

我的html:

 <div class="offset-md-2">
  <form [formGroup]="usForm">
    <div class="div-champs">
      <p id="champs">Type
        <span id="required">*</span>
      </p>
      <div class="select-style ">
          <select [(ngModel)]="selectedOption" name="type">
              <option style="display:none">
              <option [value]="o.name" *ngFor="let o of options">
                {{o.name}}
              </option>
          </select>
      </div>
    </div>
    <p id="champs" *ngIf="selectedOption == 'two'">Appears
      <input type="appears" class="form-control" name="appears">
    </p>
  </form>
</div>

我的组件.ts:

import { Component, OnInit } from '@angular/core';

import { FormGroup, FormBuilder } from '@angular/forms';

@Component({
  selector: 'app-create-us',
  templateUrl: './create-us.component.html',
  styleUrls: ['./create-us.component.css']
})
export class CreateUsComponent implements OnInit {

  public usForm: FormGroup;
  public selectedOption: string;

  constructor(private fb: FormBuilder) {
  }

  ngOnInit() {
    this.createForm();
  }

  createForm() {
    this.usForm = this.fb.group({
      'type': [null, ],
      'appears': [null, ],
    });
  }

  options = [
    { name: 'first', value: 1 },
    { name: 'two', value: 2 }
  ];
}

我简化了我的问题,实际上它是一个带有十几个输入的大型表单

我需要你的帮助,在此先感谢

问候, 瓦伦丁

【问题讨论】:

  • 我不太明白你在 行中的意思“如果我离开我的表单标签的 [formGroup] = "usForm" 将不起作用。因为 ngIf 未执行”
  • 感谢您的回答。如果我离开 [formGroup] = "usForm" 输入显示不起作用。另一方面,如果我删除标签表单的 [formGroup] = "usForm" 我的代码可以按我的意愿工作。所以问题与 [formGroup] = "usForm" 有关
  • 重复 (stackoverflow.com/questions/39152071/…)?剩下的代码可能会很好用
  • @Nuno 谢谢你的回答,我也遇到过这个问题,但它没有回答我的问题

标签: html angular forms typescript angular-ng-if


【解决方案1】:

您应该使用formControlName 而不是[(ngModel)]

然后进行比较,您应该与usForm.value.type 进行比较,而不是selectedValue

试试这个:

<div class="offset-md-2">
  <form [formGroup]="usForm">
    <div class="div-champs">
      <p id="champs">Type
        <span id="required">*</span>
      </p>
      <div class="select-style ">
          <select formControlName="type" name="type">
              <option style="display:none">
              <option [value]="o.name" *ngFor="let o of options">
                {{o.name}}
              </option>
          </select>
      </div>
    </div>
    <p id="champs" *ngIf="usForm.value.type == 'two'">Appears
      <input type="appears" class="form-control" name="appears">
    </p>
  </form>
</div>

这里有一个Sample StackBlitz 供您参考。

【讨论】:

  • 修复了我的 ngIf 问题,我忽略了绑定的值部分。对我来说是 formGroupName.value.formProperty
【解决方案2】:

在创建表单组之前加载您的模板。在创建表单组时添加 ngIf 到 wail:

<div class="offset-md-2" *ngIf="usForm">
    <form [formGroup]="usForm">

【讨论】:

  • 你知道这从未真正发生过。
  • 我刚试过,但它不起作用。感谢您的帮助,我继续研究
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2019-04-03
  • 2020-10-22
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多