用于单选按钮的 Angular2 Reactive Forms formControl
Angular2 Reactive Forms formControl for radio buttons
我正在 Angular 中使用 Reactive Forms 构建一个表单。我正在使用 FormBuilder 创建一组字段。对于文本框,这非常有效。但是我找不到单选按钮的 formControl。
这是如何工作的?我应该像使用文本输入一样使用 <input formControlName="gender" type="radio">
吗?
Should I do <input formControlName="gender" type="radio">
just like I do with text input's?
是的。
How does this work?
表单控件指令使用 ControlValueAccessor
指令与本机元素通信。每个可能的输入都有不同类型的 ControlValueAccessors
。正确的一个由值访问器指令的 selector
选择。选择器基于 type
和 <input>
是什么。当您有 type="radio"
时,将使用无线电的值访问器。
在您的组件中,将单选按钮定义为表单的一部分:
export class MyComponent {
form: FormGroup;
constructor(fb: FormBuilder){
this.form = fb.group({
gender: ""
});
}
}
在您的组件 HTML 中,构造您的表单:
<div class="form-group">
<label>Please select your gender</label>
<div class="row">
<label class="md-check">
<input type="radio" value="female" name="gender" formControlName="gender">
Female
</label>
<label class="md-check">
<input type="radio" value="male" name="gender" formControlName="gender">
Male
</label>
</div>
</div>
我假设您知道如何使用此处未显示的提交按钮构建整个表单。
提交表单时,可以在这里获取单选按钮的值:
let genderValue = this.form.value.gender;
这将是 "female" 或 "male",具体取决于选中的单选按钮。
希望对您有所帮助。祝你好运!
关于我注意到的 Reactive 表单的小补充。如果该值为整数,则需要将其更改为字符串,否则将不会选中单选按钮..
this.jobForm = this._fb.group({
id: [res["job"]["id"]],
job_status: [res["job"]["job_status"]**["id"].toString()**,Validators.required],
title: [res["job"]["title"],Validators.required]
});
Angular Material controls 已经(大部分)成熟到可以使用了。
他们的示例主要使用 ngModel,但这里介绍了如何使用 formControlName 来实现。
<mat-radio-group formControlName="colorFilter" fxLayout="column" fxLayoutGap=".25rem">
<mat-radio-button [value]="'Blue'">Blue things</mat-radio-button>
<mat-radio-button [value]="'Red'">Red things</mat-radio-button>
<mat-radio-button [value]="'Orange'">Orange things</mat-radio-button>
</mat-radio-group>
我正在使用 angular/flex-layout 将我的按钮放在垂直列中。
(也可以为常数做 value='Blue'
或 [value]="blueColorName"
来引用模型 属性。
我认为 0
可能存在问题,因为它不是 'truthy' 值,因此请注意是否绑定到枚举(可能不再是问题)。
Angular 收音机的反应式表单与输入文本框一样。找到下面的 HTML 代码和组件,使用电子邮件文本框和单选按钮发送给 select 用户。
值得注意的点: formControlName 必须与父 formGroup 指令一起使用。所以你的 formcontrol 需要在 formgroup 里面绑定
export class AppComponent {
form: FormGroup;
someError = '';
ngOnInit() {
this.form = new FormGroup({
'username': new FormControl(''),
'password': new FormControl(''),
'radiotest': new FormControl('')
});
}
reset() {
this.form.reset();
this.someError = '';
}
}
Html代码:
<form [formGroup]="form">
<label for="email">username</label>
<input type="email" class="form-control" formControlName = "username">
<input type="radio" formControlName="user" value="vimal"/>Vimal
<input type="radio" formControlName="user" value="babu"/>Babu
</form>
<button (click)="reset()">Reset</button>
<h3> {{ someError }} </h3>
<h3> {{ form.value | json }} </h3>
<form [formGroup]="form" >
<div class="row" style="margin-left: 20px; margin-bottom: 13px;">
<label class="colmn radio" style="font-size: 17px;text-transform: capitalize;">
<input type="radio" value="false" name="filter" formControlName="filter">
Daily
<span class="checkmark"></span>
</label>
<label class="colmn radio" style="font-size: 17px;text-transform: capitalize;margin-left: 56px">
<input type="radio" value="true" name="filter" [checked]="true" formControlName="filter">
Monthly
<span class="checkmark"></span>
</label>
</div>
</form>
form: FormGroup;
constructor( private _fb: FormBuilder,
) {
this.form = _fb.group({
filter: false
});
this.__filterChangeSubscription = this.form.get('filter').valueChanges.subscribe(
filterValue => {
console.log(filterValue)
}
)
}
我正在 Angular 中使用 Reactive Forms 构建一个表单。我正在使用 FormBuilder 创建一组字段。对于文本框,这非常有效。但是我找不到单选按钮的 formControl。
这是如何工作的?我应该像使用文本输入一样使用 <input formControlName="gender" type="radio">
吗?
Should I do
<input formControlName="gender" type="radio">
just like I do with text input's?
是的。
How does this work?
表单控件指令使用 ControlValueAccessor
指令与本机元素通信。每个可能的输入都有不同类型的 ControlValueAccessors
。正确的一个由值访问器指令的 selector
选择。选择器基于 type
和 <input>
是什么。当您有 type="radio"
时,将使用无线电的值访问器。
在您的组件中,将单选按钮定义为表单的一部分:
export class MyComponent {
form: FormGroup;
constructor(fb: FormBuilder){
this.form = fb.group({
gender: ""
});
}
}
在您的组件 HTML 中,构造您的表单:
<div class="form-group">
<label>Please select your gender</label>
<div class="row">
<label class="md-check">
<input type="radio" value="female" name="gender" formControlName="gender">
Female
</label>
<label class="md-check">
<input type="radio" value="male" name="gender" formControlName="gender">
Male
</label>
</div>
</div>
我假设您知道如何使用此处未显示的提交按钮构建整个表单。
提交表单时,可以在这里获取单选按钮的值:
let genderValue = this.form.value.gender;
这将是 "female" 或 "male",具体取决于选中的单选按钮。
希望对您有所帮助。祝你好运!
关于我注意到的 Reactive 表单的小补充。如果该值为整数,则需要将其更改为字符串,否则将不会选中单选按钮..
this.jobForm = this._fb.group({
id: [res["job"]["id"]],
job_status: [res["job"]["job_status"]**["id"].toString()**,Validators.required],
title: [res["job"]["title"],Validators.required]
});
Angular Material controls 已经(大部分)成熟到可以使用了。
他们的示例主要使用 ngModel,但这里介绍了如何使用 formControlName 来实现。
<mat-radio-group formControlName="colorFilter" fxLayout="column" fxLayoutGap=".25rem">
<mat-radio-button [value]="'Blue'">Blue things</mat-radio-button>
<mat-radio-button [value]="'Red'">Red things</mat-radio-button>
<mat-radio-button [value]="'Orange'">Orange things</mat-radio-button>
</mat-radio-group>
我正在使用 angular/flex-layout 将我的按钮放在垂直列中。
(也可以为常数做 value='Blue'
或 [value]="blueColorName"
来引用模型 属性。
我认为 0
可能存在问题,因为它不是 'truthy' 值,因此请注意是否绑定到枚举(可能不再是问题)。
Angular 收音机的反应式表单与输入文本框一样。找到下面的 HTML 代码和组件,使用电子邮件文本框和单选按钮发送给 select 用户。
值得注意的点: formControlName 必须与父 formGroup 指令一起使用。所以你的 formcontrol 需要在 formgroup 里面绑定
export class AppComponent {
form: FormGroup;
someError = '';
ngOnInit() {
this.form = new FormGroup({
'username': new FormControl(''),
'password': new FormControl(''),
'radiotest': new FormControl('')
});
}
reset() {
this.form.reset();
this.someError = '';
}
}
Html代码:
<form [formGroup]="form">
<label for="email">username</label>
<input type="email" class="form-control" formControlName = "username">
<input type="radio" formControlName="user" value="vimal"/>Vimal
<input type="radio" formControlName="user" value="babu"/>Babu
</form>
<button (click)="reset()">Reset</button>
<h3> {{ someError }} </h3>
<h3> {{ form.value | json }} </h3>
<form [formGroup]="form" >
<div class="row" style="margin-left: 20px; margin-bottom: 13px;">
<label class="colmn radio" style="font-size: 17px;text-transform: capitalize;">
<input type="radio" value="false" name="filter" formControlName="filter">
Daily
<span class="checkmark"></span>
</label>
<label class="colmn radio" style="font-size: 17px;text-transform: capitalize;margin-left: 56px">
<input type="radio" value="true" name="filter" [checked]="true" formControlName="filter">
Monthly
<span class="checkmark"></span>
</label>
</div>
</form>
form: FormGroup;
constructor( private _fb: FormBuilder,
) {
this.form = _fb.group({
filter: false
});
this.__filterChangeSubscription = this.form.get('filter').valueChanges.subscribe(
filterValue => {
console.log(filterValue)
}
)
}