Angular 使用对象作为值的角度检查单选按钮
我在Angular 5上构建了一个表单,我有一组按组划分的单选按钮,我想根据对象值检查这些单选按钮。这是我目前的代码: .tsAngular 使用对象作为值的角度检查单选按钮,angular,angular-forms,Angular,Angular Forms,我在Angular 5上构建了一个表单,我有一组按组划分的单选按钮,我想根据对象值检查这些单选按钮。这是我目前的代码: .ts constructor( private _params: ActivatedRoute, ) { _params.queryParams.subscribe(param => { this.param = param; }); this.filterForm = new FormGroup({ '
constructor(
private _params: ActivatedRoute,
) {
_params.queryParams.subscribe(param => {
this.param = param;
});
this.filterForm = new FormGroup({
'filter': new FormControl(this.param, [
Validators.required,
])
});
}
.html
<form novalidate [formGroup]="filterForm" (ngSubmit)="onSubmit()">
<article>
<h4>Model</h4>
<fieldset *ngFor="let item of models; let i = index">
<input id="M{{i}}" type="radio" formControlName="filter" [value]="{model: item.url}" />
<label for="M{{i}}"><span></span> {{item.name}}</label>
</fieldset>
</article>
<article>
<h4>Type</h4>
<fieldset *ngFor="let item of types; let i = index">
<input id="T{{i}}" type="radio" formControlName="filter" [value]="{type: item.url}" />
<label for="T{{i}}"><span></span> {{item.name}}</label>
</fieldset>
</article>
<article>
<h4>Color</h4>
<fieldset *ngFor="let item of colors; let i = index">
<input id="C{{i}}" type="radio" formControlName="filter" [value]="{color: item.url}" />
<label for="C{{i}}"><span></span> {{item.name}}</label>
</fieldset>
</article>
<button>Apply filter</button>
</form>
当我点击一个单选按钮时,同样的事情发生了,它按预期工作,给出正确的输出并按预期保留选择
问题是当我第一次初始化表单时,没有单选按钮被标记为选中。仅在第一次单击之后
由于表单也在一个div中,ngIf用于显示/隐藏要过滤的选项,因此当我隐藏并显示时,按钮将再次丢失其选择
因此,如果我在URL上已经有了一个参数并将其传递给表单,那么单选按钮将不会被选中。我希望它被选中,因为表单值和
[value]
属性上的值是相同的。如果单击相同的按钮进行选择,则表单值保持不变
在这种情况下,我做错了什么?
[value]=“{color:item.url}”
本质上是在这里启动一个新对象,它肯定不同于对象this.param
,尽管它们可能具有相同的文字表示。@HarryNinh但是,有没有办法实现这个结果?我想说,这是非常繁重的。首先在tsthis.colorOptions=this.colors.map(item=>return{color:item.url})
中列出可能的选择,然后通过在该列表中查找对象来填充表单控件值let theOption=this.colorOptions.find(i=>i.color==this.param.color);…'filter':new FormControl(选项)
我正在尝试了解此处的设置。每次迭代都使用相同的FormControl?请用板条箱装一个演示来展示这个问题,因为现在这似乎对您试图实现的目标没有意义?:)
{color: "Blue"};