Angular ngIf 表单组
Angular ngIf formGroup
我在 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>
我的component.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 }
];
}
我简化了我的问题,实际上它是一个有十几个输入的大表格
我需要你的帮助,在此先感谢
此致,
瓦伦丁
您的模板在创建表单组之前加载。添加 ngIf 以在创建表单组时发出警告:
<div class="offset-md-2" *ngIf="usForm">
<form [formGroup]="usForm">
您应该使用 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 供您参考。
我在 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>
我的component.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 }
];
}
我简化了我的问题,实际上它是一个有十几个输入的大表格
我需要你的帮助,在此先感谢
此致, 瓦伦丁
您的模板在创建表单组之前加载。添加 ngIf 以在创建表单组时发出警告:
<div class="offset-md-2" *ngIf="usForm">
<form [formGroup]="usForm">
您应该使用 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 供您参考。