Angular 13:收音机 [已检查] 不适用于 formControlName
Angular 13: Radio [checked] not working with formControlName
我正在使用一个简单的 FormGroup
来为收音机设置一个检查值,但它根本不起作用。它从首页到代码有效,但从代码到首页无效。
HTML:
<form [formGroup]="myForm">
<div class="form-check form-check-inline mt-2">
<input class="form-check-input" type="radio" formControlName="radioValue1"
id="radioStopLossNone" [checked]="radioModel.value1==1"
value="1">
<label class="form-check-label" for="radioStopLossNone">None</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
id="radioStopLossFixed" [checked]="radioModel.value1==2"
value="2">
<label class="form-check-label" for="radioStopLossFixed">Value-1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
id="radioStopLossTrailing" [checked]="radioModel.value1==3"
value="3">
<label class="form-check-label" for="radioStopLossTrailing">Value-2</label>
</div>
</form>
型号:
export class Model {
value1: number;
}
TS:
ngOnInit(): void {
this.model = new Model();
this.model.value1 = 1;
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
this.f.radioValue1.valueChanges.subscribe(() => {
console.log('radioValue1: ' + this.f.radioValue1.value);
});
}
现在,如果我从 radio
控件中删除 formControlName
标签,那么它会开始读取代码并检查从代码到首页的 radios
,但会禁用link 从首页到代码。我怎样才能让他们同时工作?
谢谢。
解决方案:
我按照@rohithpoya 的建议从 HTML
中删除 checked
属性并在模型中使用相同的数据类型并且它有效。
<input type="radio" formControlName="radioValue1" value="2"> // value is string
value='2'
设置为string
,那么在我使用的模型中:
this.model.value1 = '1'; // value here is string too
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
您可以删除选中的属性。实际上,如果您在表单控件中有值,它应该会自动被选中。如果它不起作用,您需要检查您将值定义为数字的 value.In 模板的类型,并请确认您在表单控件中也有数字类型。
我还看到你没有在 ts 文件中声明 radioModel。因此,请尝试使用 model.
而不是 radioModel
更新
ngOnInit(): void {
this.radioModel = new Model();
this.radioModel.value1 = 1;
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
this.f.radioValue1.valueChanges.subscribe(() => {
console.log('radioValue1: ' + this.f.radioValue1.value);
});
}
在 ts 文件中使用它。
您没有正确获取 radioValue1
使用此代码:
HTML :
<div class="form-check form-check-inline mt-2">
<input class="form-check-input" type="radio" formControlName="radioValue1"
[checked]="radioModel.value1 === 1" [value]="1">
<label class="form-check-label" for="radioStopLossNone">None</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
[checked]="radioModel.value1 === 2" [value]="2">
<label class="form-check-label" for="radioStopLossFixed">Value-1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
[checked]="radioModel.value1 === 3" [value]="3">
<label class="form-check-label" for="radioStopLossTrailing">Value-2</label>
</div>
TS :
ngOnInit(): void {
this.model = new Model();
this.model.value1 = 1;
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
this.myForm.controls["radioValue1"].valueChanges.subscribe(() => {
this.model.value1 = this.myForm.controls["radioValue1"].value;
console.log('radioValue1: ' + this.myForm.controls["radioValue1"].value);
});
}
在 TS 代码中,您可以使用
myForm.controls["radioValue1"]
并对其进行操作。
在 HTMl 代码中,您通过 [value]
属性设置输入值而不是常规的“值”属性。
并通过将 ==
更改为 ===
来正确检查它是否匹配
我正在使用一个简单的 FormGroup
来为收音机设置一个检查值,但它根本不起作用。它从首页到代码有效,但从代码到首页无效。
HTML:
<form [formGroup]="myForm">
<div class="form-check form-check-inline mt-2">
<input class="form-check-input" type="radio" formControlName="radioValue1"
id="radioStopLossNone" [checked]="radioModel.value1==1"
value="1">
<label class="form-check-label" for="radioStopLossNone">None</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
id="radioStopLossFixed" [checked]="radioModel.value1==2"
value="2">
<label class="form-check-label" for="radioStopLossFixed">Value-1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
id="radioStopLossTrailing" [checked]="radioModel.value1==3"
value="3">
<label class="form-check-label" for="radioStopLossTrailing">Value-2</label>
</div>
</form>
型号:
export class Model {
value1: number;
}
TS:
ngOnInit(): void {
this.model = new Model();
this.model.value1 = 1;
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
this.f.radioValue1.valueChanges.subscribe(() => {
console.log('radioValue1: ' + this.f.radioValue1.value);
});
}
现在,如果我从 radio
控件中删除 formControlName
标签,那么它会开始读取代码并检查从代码到首页的 radios
,但会禁用link 从首页到代码。我怎样才能让他们同时工作?
谢谢。
解决方案:
我按照@rohithpoya 的建议从 HTML
中删除 checked
属性并在模型中使用相同的数据类型并且它有效。
<input type="radio" formControlName="radioValue1" value="2"> // value is string
value='2'
设置为string
,那么在我使用的模型中:
this.model.value1 = '1'; // value here is string too
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
您可以删除选中的属性。实际上,如果您在表单控件中有值,它应该会自动被选中。如果它不起作用,您需要检查您将值定义为数字的 value.In 模板的类型,并请确认您在表单控件中也有数字类型。
我还看到你没有在 ts 文件中声明 radioModel。因此,请尝试使用 model.
而不是 radioModel更新
ngOnInit(): void {
this.radioModel = new Model();
this.radioModel.value1 = 1;
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
this.f.radioValue1.valueChanges.subscribe(() => {
console.log('radioValue1: ' + this.f.radioValue1.value);
});
}
在 ts 文件中使用它。
您没有正确获取 radioValue1
使用此代码:
HTML :
<div class="form-check form-check-inline mt-2">
<input class="form-check-input" type="radio" formControlName="radioValue1"
[checked]="radioModel.value1 === 1" [value]="1">
<label class="form-check-label" for="radioStopLossNone">None</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
[checked]="radioModel.value1 === 2" [value]="2">
<label class="form-check-label" for="radioStopLossFixed">Value-1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" formControlName="radioValue1"
[checked]="radioModel.value1 === 3" [value]="3">
<label class="form-check-label" for="radioStopLossTrailing">Value-2</label>
</div>
TS :
ngOnInit(): void {
this.model = new Model();
this.model.value1 = 1;
this.myForm = this.formBuilder.group({
radioValue1: [model.value1, [Validators.required]],
});
this.myForm.controls["radioValue1"].valueChanges.subscribe(() => {
this.model.value1 = this.myForm.controls["radioValue1"].value;
console.log('radioValue1: ' + this.myForm.controls["radioValue1"].value);
});
}
在 TS 代码中,您可以使用
myForm.controls["radioValue1"]
并对其进行操作。
在 HTMl 代码中,您通过 [value]
属性设置输入值而不是常规的“值”属性。
并通过将 ==
更改为 ===