Angular 使用对象作为值的角度检查单选按钮

Angular 使用对象作为值的角度检查单选按钮,angular,angular-forms,Angular,Angular Forms,我在Angular 5上构建了一个表单,我有一组按组划分的单选按钮,我想根据对象值检查这些单选按钮。这是我目前的代码: .ts constructor( private _params: ActivatedRoute, ) { _params.queryParams.subscribe(param => { this.param = param; }); this.filterForm = new FormGroup({ '

我在Angular 5上构建了一个表单,我有一组按组划分的单选按钮,我想根据对象值检查这些单选按钮。这是我目前的代码:

.ts

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但是,有没有办法实现这个结果?我想说,这是非常繁重的。首先在ts
this.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"};